テーブル(Table)
Lua にはデータを構造化するのはテーブルのみ。 キーと値の組の集合からなる、連想配列のこと。-- table の生成 tbl = { name="xxx", age=10, price=0 } -- テーブルへのメンバのアクセスには [] を使う。 -- .key の表記は [ "key" ] と同じ。 tbl[ "key" ] tbl.key -- 指定したフィールドがない場合は nil が返る tbl.foo; -- field の追加 tbl.foo = "bar";WARNING tbl.name 表記は tbl[ "name" ] と同じ。 次の処理は思ったとおりの動作をしない。function isKeyExist( tbl, key ) if ( tbl.key !~ nil ) then end endtbl.key は tbl[ "key" ] とみなされる。 そこで [ key ] とすれば正しく動作する。if ( tbl[key] !~ nil ) then end追加.削除
tbl[ "age" ] = 10 tbl[ "name" ] = "test" -- キーは数値でも指定できる tbl[ 1 ] = 10; -- 削除をするには nil をセットする tbl[ "name" ] = nil -- iterate すると削減されたことがわかる for key, val in pairs( tbl ) do print ( key ) print ( val ) endソート(sort)
SYNTAX table.sort( array [, function ] ) DESC 配列を昇順にソートする。local a = {7, 5, 3}; table.sort(a); -- 結果を表示 for i=1, #a do print(a[i]); end比較用の関数を指定する。a = {} a[1] = { name="a", price=300 }; a[2] = { name="b", price=100 }; a[3] = { name="c", price=200 }; function cmpfunc( a, b ) return a.price < b.price end table.sort( a, cmpfunc ); for i=1, #a do print( a[i].price ); endforeach(イテレート)
for t, val in pairs( members ) do for k, v in pairs(val) do print( k, v ); end end while で利用する k, v = next( player1 ); while (k) do print( v ); k, v = next( player1, k ); end