zoukankan      html  css  js  c++  java
  • Lua中ipairs()和pairs()的区别与使用

    Lua中ipairs()和pairs()的区别与使用

    关于ipairs()和pairs(),Lua官方手册是这样说明的:

    pairs (t)

    If t has a metamethod __pairs, calls it with t as argument and returns the first three results from the call.

    Otherwise, returns three values: the next function, the table t, and nil, so that the construction

         for k,v in pairs(t) do body end
    

    will iterate over all key–value pairs of table t.

    See function next for the caveats of modifying the table during its traversal.

    ipairs (t)

    If t has a metamethod __ipairs, calls it with t as argument and returns the first three results from the call.

    Otherwise, returns three values: an iterator function, the table t, and 0, so that the construction

         for i,v in ipairs(t) do body end
    

    will iterate over the pairs (1,t[1]), (2,t[2]), ..., up to the first integer key absent from the table.

    根据官方手册的描述,pairs会遍历表中所有的key-value值,而pairs会根据key的数值从1开始加1递增遍历对应的table[i]值,直到出现第一个不是按1递增的数值时候退出。

    下面我们以例子说明一下吧

    stars = {[1] = "Sun", [2] = "Moon", [5] = 'Earth'}

    for i, v in pairs(stars) do

       print(i, v)

    end

    使用pairs()将会遍历表中所有的数据,输出结果是:

    1    Sun
    2    Moon
    5    Earth

    如果使用ipairs()的话,

    for i, v in ipairs(stars) do

       print(i, v)

    end

    当i的值遍历到第三个元素时,i的值为5,此时i并不是上一个次i值(2)的+1递增,所以遍历结束,结果则会是:

    1    Sun
    2    Moon

    ipairs()和pairs()的区别就是这么简单。

    还有一个要注意的是pairs()的一个问题,用pairs()遍历是[key]-[value]形式的表是随机的,跟key的哈希值有关系。看以下这个例子:

    stars = {[1] = "Sun", [2] = "Moon", [3] = "Earth", [4] = "Mars", [5] = "Venus"}

    for i, v in pairs(stars) do

       print(i, v)

    end

    结果是:

    2    Moon
    3    Earth
    1    Sun
    4    Mars
    5    Venus

    并没有按照其在表中的顺序输出。

    但是如果是这样定义表stars的话

    stars = {"Sun", "Moon",  “Earth”, "Mars",  "Venus"}

    结果则会是

    1    Sun
    2    Moon
    3    Earth
    4    Mars
    5    Venus

    你清楚了吗?:)

    当前标签: C++

     
    链接 Nick Yang 2013-03-08 13:01 阅读:1 评论:0  
     
    内存对齐 Nick Yang 2013-02-27 21:45 阅读:119 评论:0  
     
    do...while(0)的妙用 Nick Yang 2012-11-22 22:57 阅读:192 评论:2
     
     
     
    标签: Lua
  • 相关阅读:
    Ajax实现文件下载
    jquery easyui 插件开发
    Chrome谷歌浏览器首页被改为Hao123导航怎么办|附各类解决方法【转】
    查看mysql版本的四种方法
    IntelliJ IDEA 快捷键大全
    Java中判断字符串是否为数字的五种方法
    比数据分析更要命的是:数据质量
    Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?
    大数据需要好设计
    Python模块学习filecmp文件比较
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2958434.html
Copyright © 2011-2022 走看看