-- 安全的做法:用 table.maxn(Lua 5.2 后移除) -- 或自己遍历 localfunctionmaxn(t) localmax = 0 for k inpairs(t) do iftype(k) == "number"and k > maxthen max = k end end returnmax end
print(maxn(arr)) --> 5
9.5 遍历 Table
pairs():遍历所有键值对
1 2 3 4 5 6 7 8 9 10 11
local t = {a = 1, b = 2, c = 3, [1] = "one", [2] = "two"}
for k, v inpairs(t) do print(k, v) end -- 输出顺序不确定(哈希表特性): -- 1 one -- 2 two -- a 1 -- b 2 -- c 3
ipairs():遍历连续整数索引
1 2 3 4 5 6 7 8 9
local t = {"a", "b", "c", key = "value", [5] = "e"}
for i, v inipairs(t) do print(i, v) end -- 输出:1 a 2 b 3 c(遇到 key 和 5 就停了) -- ipairs 从 1 开始递增,直到遇到 nil 退出
print(t[5]) --> e(值存在,但 ipairs 不会遍历到)
pairs vs ipairs 对比
特性
pairs
ipairs
遍历范围
所有 key
仅连续整数 key(从 1 开始)
遍历顺序
无序
按索引递增
遇到 nil
继续遍历
停止
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- 通用遍历策略 local t = {10, 20, 30}
-- 数组部分用 ipairs for i, v inipairs(t) do print("索引", i, "值", v) end
-- 字典部分用 pairs local dict = {a = 1, b = 2, c = 3} for k, v inpairs(dict) do print("键", k, "值", v) end