Lua base next()

前言

以前我们要遍历一个table的是否往往会是用for循环,如果不是数字索引的表只能使用pairs了,今天这个函数提供了一个方法,就是不断的查询下一个元素的索引和对应的值,来达到遍历table的目的,接下来我们一起来看一下实现的方法。

内容


next()

  • next(table [, index])

  • 解释:使程序可以遍历表table的所有字段。他的第一个参数是一个表,第二个参数是一个表中有效的索引。函数会返回表中相对于指定索引的下一个索引和索引位置的值,当我们将第二个参数设置为nil调用函数时,函数会返回这个表的初始索引和该索引位置的值,当我们使用表的最后一个索引或者在空表中使用nil做索引时,函数就会返回nil。当我们省略第二个参数时,它会被默认解释成nil。特别的,你可以使用next(t)的形式来检测表是否为空。

  • 使用这个函数获得的索引是未指定顺序的枚举,即使是对于数字类型的索引也是一样(如果要以数字的顺序遍历一个表,应该是使用数字类型的for或者是ipairs函数)。

  • 函数如果在遍历期间你给一个并不存在的字段赋值,其行为的结果是未定义的。不过你可以修改已经存在的字段,也可以清除已经存在的字段。


Usage

  • 首先我们新建一个文件将文件命名为nexttest.lua然后编写代码如下:
-- 定义一个测试表
local tab = {
    x = 1,
    y = 66,
    [100] = 100,
    [3] = 3,
}

-- 判断表是否为空
local index, value = nil, nil
index, value = next(tab)
if index ~= nil then
    print("\ntable tab is not nil")
end

-- 遍历table
print("\ntraverse table result:")
while index ~= nil do
    print("[\""..index.."\"] = "..value);
    index, value = next(tab, index)
end


index = "x"
index, value = next(tab, index)
-- 再次遍历table
print("\ntraverse table again result:")
while index ~= nil do
    print("[\""..index.."\"] = "..value);
    index, value = next(tab, index)
end

-- 传入最后索引
local ret = next(tab, 100)
print("\nlast index test ret is", ret)

-- 传入空表
local ret = next({}, nil)
print("\nnil table test ret is", ret)

-- 传入不存在索引
local ret = next(tab, 1000)
print("\nerror index test ret is", ret)
  • 运行结果

base_next.png

总结

  • 函数的解释中所要注意的问题我在例子中都做了测试,大家看一下测试结果接就好。
  • 其中最需要注意的就是在函数的遍历期间向表中添加数据的情况,这种结果未定义,我们要尽量避免。
  • 当传入无效索引时函数会报错,所以还不是不要随便传入一个索引,而应该使用这个函数返回的索引


 


作者:AlbertS
链接:https://www.jianshu.com/p/f1a5c540d8a8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值