lua next.md 1.8 KB

#unity/日常积累

在 Lua 中,next 是一个内置函数,通常用于迭代表(table)的键值对。它是 Lua 的核心功能之一,在遍历表时尤其有用。


基本语法

next(table [, index])
  • 参数

    • table:需要遍历的表。
    • index(可选):当前键的位置。如果省略,next 从表的第一个键值对开始。
  • 返回值

    • 返回表中下一个键及其对应的值。如果遍历到表的末尾,则返回 nil

示例 1:遍历表

local t = {a = 1, b = 2, c = 3}

local key, value = next(t)  -- 从第一个键开始
while key do
    print(key, value)       -- 输出键和值
    key, value = next(t, key)  -- 获取下一个键值对
end

输出

a 1
b 2
c 3

注意:键值对的顺序是非确定性的,Lua 不保证表的遍历顺序。


示例 2:和 pairs 的关系

nextpairs 函数的底层实现。实际上,pairs 函数可以看作是调用 next 的迭代器封装。

local t = {x = 10, y = 20}

for key, value in pairs(t) do
    print(key, value)  -- 等价于用 next 手动迭代
end

示例 3:判断表是否为空

next 可用来简单地检查表是否为空:

local t = {}

if next(t) == nil then
    print("表是空的")
else
    print("表中有内容")
end

注意事项

1   慎用 next 修改表:在使用 next 遍历表时,不要尝试在遍历过程中修改表的内容(如新增或删除键值对),否则可能导致未定义行为。
2   键为 nil 的情况:Lua 表中的键不能为 nil,因此 next 遇到键为 nil 的表时会报错。

next 是一个灵活的工具,但大多数情况下可以通过更高层的迭代器(如 pairs 或 ipairs)替代。