In Lua, pairs
and 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()
Lua 函数产生如上所示的 2-1-3 顺序。
我正在寻找一种有效的 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 和最后找到的整数键来继续遍历表的其余部分,避免再次遍历整数键部分?这样做是否有可能两次看到一些整数键?