テーブル(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 end
tbl.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 ); end



foreach(イテレート)


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