a[#a+1] = vなどで、リストの最後に追加というイディオムとなります。
days = { [0] = "Sunday", "Monday", "Tuesday", ..... }というようにインデックス[0]を書いておけば良い。
arr = { 1,2,3,[0]=0 }というように、位置はどこでも良い。
local a = {1,2,3,nil,5,nil} print(#a) --> 3 local a = {1,2,3,nil,5} a[4] = nil print(#a) --> 5 a[6] = nil print(#a) --> 3 a[6] = 6 print(#a) --> 3 local a = {1,2,3,nil,5,nil} print(#a) --> 3 a[6] = 6 print(#a) --> 6 a[6] = nil print(#a) --> 3 a[7] = 7 print(#a) --> 3
というように、理解しがたい値が返ってきます。
local a = {1,2,3,nil,5} for k, v in ipairs(a) do print(k, v) end -- 1 1 -- 2 2 -- 3 3
mytable = {}; if not next mytable then print "It's empty" end関連項目 => table.empty
arr = { 1,2,3, }
arr = { 1,2,3; 10,11,12; }
--一番良く利用する配列タイプのテーブルのシャロウコピーの場合、関数すら不要です。 local old_tbl = {5,8,"abc", "あいう"} local new_tbl = { unpack(old_tbl) } -- テーブルをリスト化してテーブルとすることでシャロウコピーとなる。 5.2以降は { table.unpack(old_tbl) }
a = {} for i=-5, 5 do a[i] = 0 end
mt = {} --行列の作成 for i=1, N do mt[i] = {} --行 for j=1, M do mt[i][j] = 0 end end
function setDefault(t, d) local mt = {__index = function() return d end } -- メタテーブルで指定の初期値 setmetatable(t, mt) end local tab = {x=10, y=20} print(tab.x, tab.z) -->10, nil setDefault(tab, 0) print(tab.x, tab.z) -->10, 0
local defaults = {} setmetatable(defaults, {__mode = "k" } ) -- defaults は弱いキーを持つ。使われていないキーは回収可能とする。 local mt = {__index = function (t) return defaults[t] end } function setDefault(t, d) defaults[t] = d --そのテーブル自身をキーとしてデフォルト値を持つ setmetatable(t, mt) end tab = {x=10, y=20} print(tab.x, tab.z) -->10, nil setDefault(tab, 0) print(tab.x, tab.z) -->10, 0
local metas = {} setmetatable(metas, {__mode = "v" }) -- 弱い値にすることで、いざとなれば、使われていないメタテーブルは回収可能とする。 function setDefault(t, d) local mt = metas[d] if mt == nil then mt = {__index = function() return d end } metas[d] = mt -- 新たなメタテーブルであれば、それをメモ化 end setmetatable(t, mt) end tab = {x=10, y=20} print(tab.x, tab.z) -->10, nil setDefault(tab, 0) print(tab.x, tab.z) -->10, 0