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を使用する場合、テーブルを反復処理するためのツールは1つだけです。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の使用を開始して、整数キー部分を再度ウォークしないようにテーブルの残りの部分をウォークし続ける簡単な方法はありますか?そうすることで、いくつかの整数キーが2回表示される可能性はありますか?