pairs
pairs 会输出 table 中的值和键值对,并且在输出的过程中先按顺序输出值,再乱序输出键值对。
ipairs
ipairs 并不会输出 table 中存储的键值对,会跳过键值对,然后按顺序输出 table 中的值。遇到 nil 结束遍历!
local testTbl = {"hello", num = 666, "world", nil, level = 100, "abc"}
for k, v in pairs(testTbl) do
print(k .. " : " .. v)
end
-- 1 : hello
-- 2 : world
-- 4 : abc
-- level : 100
-- num : 666
for k, v in ipairs(testTbl) do
print(k .. " : " .. v)
end
-- 1 : hello
-- 2 : world
ps:table 在存储值的时候是按照顺序存储的;但是在存储键值对的时候是按照键的哈希值存储的,并不会按照键的字母顺序或是数字顺序存储。
结论:
需要遍历 table 的时候直接用 pairs 完事儿,甭管 ipairs 了!