在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
主要在有key为整数的时候有区别. 注意数组默认的下标从1开始,比如a={"a","b","c","d"},和a={[1]="a",[2]="b",[3]="c",[4]="d"}是一样的. local a = { "a","b","c","d" } for k, v in pairs(a) do print(k, v) end 所以ipair和pairs的结果都是 1 a 但是如果数组中的key和从1开始数的key不相同的话,或者是非整数,ipairs就此break,pairs不受影响. local a = { "a",[2]="b",[4]="c",[5]="d" } for k, v in pairs(a) do print(k, v) end pairs输出 1 a ipairs输出 1 a 应为"c"的key不是3,所以就中断了 以及 for k,v in pairs(a) do print(k,v) end 也不会输出的
还有一点需要注意的是,数组的自动排序功能 如果改成这样 local a = { "a",[2]="b",[4]="c","d" } for k, v in pairs(a) do print(k, v) end pairs输出 1 a 因为自动排序,先按照没key的给默认key,所以就变成{[1]="a",[2]="d",[2]="b",[4]="c"} 前面的[2]="d"会移除掉后面的,[2]="b",所以没有输出b
如果是pairs 1 a 应为[2]="b"被移除,[4]="c"不等于3,所以只输出 1 a
如果table中有nil,pairs会跳过,ipairs会break掉 a={1,nil,3,4} for k,v in ipairs(a) do print(k,v) end 输入 1 a={1,nil,5,6} for k,v in pairs(a) do print(k,v) end 输出 1 1 解决办法是用select a={1,nil,5,6} |
请发表评论