Luaリファレンス 要注意点 ~ハッシュ~†
文字インデックス(フル記法版)†
文字インデックス(シンタックスシュガー版)†
バッグの例†
- バッグとは、要素の数も含めて要素内容を保持するもの
bag = {} -- 名前空間
-- テーブルに要素を加えたら、その項目をインクリメント
function bag.insert (tbl, element)
tbl[element] = (tbl[element] or 0) + 1
end
-- テーブルから要素を削除したら、デクリメント。0になるなら、nilにして消す
function bag.remove (tbl, element)
local count = tbl[element]
tbl[element] = (count and count > 1) and count -1 or nil
end
セットの例†
- セットとは(数学の)理論集合として取り扱えるもの
Set = {}
function Set.new (tbl)
local set = {}
for _, v in ipairs(tbl) do set[v] = true end
return set
end
function Set.union(a, b)
local res = Set.new{}
for k in pairs(a) do res[k] = true end
for k in pairs(b) do res[k] = true end
return res
end
function Set.intersection(a, b)
local res = Set.new{}
for k in pairs(a) do
res[k] = b[k] -- nilであれば、LUAでは該当のキーごと消えるからだ。
end
return res
end
function Set.tostring(set)
local l = {}
for e in pairs(set) do
l[#l + 1] = e
end
return "{" .. table.concat(l, ", ") .. "}"
end
function Set.print(s)
print(Set.tostring(s))
end
|