web-dev-qa-db-ja.com

lua:テーブル内のすべてのペアを反復処理します

私はまばらなluaテーブルを持っているので、それを繰り返す必要があります。問題は、luaが1から反復を開始し、nil値が見つかるとすぐに終了するようです。ここに例があります:

> tab={}
> tab[2]='b'
> tab[5]='e'
> for i,v in ipairs(tab) do print(i,v) end
>               --nothing is output here
> tab[1]='a'
> for i,v in ipairs(tab) do print(i,v) end
1   a
2   b
>               --terminates after 2 (first nil value is tab[3])

目的の出力を取得する方法はありますか?

1   a
2   b
5   e
18
ewok

pairsの代わりにipairsを使用する必要があります。

tab={}

tab[1]='a'
tab[2]='b'
tab[5]='e'

for k, v in pairs(tab) do print(k, v) end

(任意の順序で)出力します:

1   a
2   b
5   e

ipairsは、1から始まり、最初のnilペアで中断する、連続する整数キーを繰り返し処理します。

pairsは、テーブル内のすべてのキーと値のペアを繰り返し処理します。これはnot特定の順序で反復することが保証されていることに注意してください。

33
Axel Isouard