在 Lua 中,pairs
可以ipairs
以不同的顺序迭代相同的元素:
> t = {[1]=1, [2]=2, [3]=3}
> for k,v in pairs(t) do print(k,v) end
2 2
1 1
3 3
> for k,v in ipairs(t) do print(k,v) end
1 1
2 2
3 3
在使用 C API 时,我只看到一个用于迭代表的工具:lua_next()函数,它的作用非常类似于pairs()
产生上述 2-1-3 顺序的 Lua 函数。
我正在寻找一种有效的 C 方法来按顺序迭代表的整数键(ipairs 的 C API 版本)。
我天真地认为:
int tableLength = luaL_len(L, tableIndex);
for (i=0, i++, i>tableLength){
// if t[i] is not null ...
}
但我不清楚表大小与连续整数键的数量不匹配的潜在性能问题:
t = {[1]=1, [2]=2, [4]=4} -- has a (reported) length of 4
t = {[1]=1, [2]=2, [40000]=4} -- has a (reported) length of 2
如果这确实是 ipairs 的方式,那么是否有一种简单的方法可以开始使用 lua_next 和最后找到的整数键来继续遍历表的其余部分,避免再次遍历整数键部分?这样做有没有机会看到一些整数键两次?