Lua の配列の複製 [Lua]
Lua のテーブルは mutable なデータ型なので、例えば関数にテーブルを渡して関数の中でテーブルの書き換え操作とかを行うと、呼び出し側からみてもテーブルの内容が変わってしまったりします。
これが困る場合もあるのでどうにかならないかということを前からぼんやり思っていて、一つにはテーブルをコンスセルとみなすリスト構造とその操作用関数を定義してやればいいというのがありますが、これはちょっと面倒くさい。
もう一つは呼び出し側か関数側かどちらかでテーブルの複製を行えばよい。しかしこれは標準ライブラリにありません。こういうコードを書く必要がでてきます。
local new = {}
for k,v in ipairs(old) do
new[k] = v
end
勿論これを関数にしておけばいいのですが、もっと手元にあるものだけで「手軽」にやる方法はないかと思っていました。
ところが今ふと思いついたのですが、こうすればよいだけです。わりとあっけない話でした。
{unpack(old)}
確かめてみます。
> old = {1,2,3} > new1 = old > new2 = {unpack(old)} > new1[1] = 4 > new2[1] = 5 > print(table.concat(old, ",")) 4,2,3 > print(table.concat(new1, ",")) 4,2,3 > print(table.concat(new2, ",")) 5,2,3
制限として浅いコピーであること、配列としてのテーブルのみに使えることがありますが、贅沢を言わない場面では重宝しそうです。
コメント 0