Luaのテーブル周りメモ
・関数の戻り値でテーブルを初期化する場合
function f ()
return "x","y","z"
end
 という関数fがあるとする。
t = {f()} は t = {"x","y","z"} と同じ
t = {"a","b",f()} は t = {"a","b","x","y","z"} と同じ
t = {"a","b",f(),"c"} は t = {"a","b","x","c"} と同じ
 {}の最後に関数のときだけ、戻り値が全部格納されるらしい。
 また、戻り値の展開を回避したい時はt = {(f())}と、関数をカッコでくくるといい。

・テーブルの各要素を巡回
 これにはいくつか方法がある。
1.for&pairs()
●書き方
for k,v in pairs(t) do
end
●概要
 一般的な書き方。巡回する順番は不定である。

2.for&ipairs()
●書き方
for i,v in ipairs(t) do
end
●概要
 t[1]から、最初にnilが返ってくるまでの間、ループを繰り返す。
 テーブルを配列のように扱っている時はこの方法を使う。

3.while&next()
●書き方
k,v = next(t)
while(k)
--処理
k,v = next(t,k)
end
●概要
 たぶん1.と変わらない。

4.for&#
●書き方
for i = 1,#t do
end
●概要
 ipairs()を使用した場合、途中の要素がnilだと(例:t = {1, nil, 3})、テーブルの終端に到達する前に処理が終了してしまう。要素にnilが含まれている場合でも終端まで処理したい場合はipairs()ではなくこちらの方法を使う。

・table.concat()
t = {"1","2","3"}
 というテーブルを、
1,2,3
 といったcsvみたいな文字列にしたい場合は、table.concat(t, ",")で事足りる。
(注意事項)
 連結されるのはキーが数値の要素だけで、キーが文字列の要素は含まれない(例:t["x"]など)。
 また、キーが数値の場合でも、キーの間が飛んでいる場合は、連続している部分のみ連結する。(例:t[2]の次がt[4]である場合、t[1]とt[2]の要素だけを連結する)
[PR]
by lyricist_m | 2009-04-27 08:21 | NSLua
<< luasubをLua側から呼び出す ボタン拡張 >>