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