Python では set または itertools を使用して、あるリストの別のリストのサブセットを見つけることができますが、Lua で同じことを行うにはどうすればよいでしょうか?
a = {1,2,3}
b = {2,3}
b が a のサブセットであることを確認するにはどうすればよいですか?
Python では set または itertools を使用して、あるリストの別のリストのサブセットを見つけることができますが、Lua で同じことを行うにはどうすればよいでしょうか?
a = {1,2,3}
b = {2,3}
b が a のサブセットであることを確認するにはどうすればよいですか?
セットは、メンバーシップ テストのルックアップとしてテーブルを使用して Lua で実装できます (「Lua でのプログラミング」で行ったように)。テーブル内のキーはセットの要素であり、値はtrue
要素がセットに属しているかどうかのいずれかですnil
。
a = {[1]=true, [2]=true, [3]=true}
b = {[2]=true, [3]=true}
-- Or create a constructor
function set(list)
local t = {}
for _, item in pairs(list) do
t[item] = true
end
return t
end
a = set{1, 2, 3}
b = set{2, 3}
集合演算の記述は、この形式でも簡単です (ここのように)。
function subset(a, b)
for el, _ in pairs(a) do
if not b[el] then
return false
end
end
return true
end
print(subset(b, a)) -- true
print(subset(set{2, 1}, set{2, 2, 3, 1})) -- true
a[1] = nil -- remove 1 from a
print(subset(a, b)) -- true
a
とが配列形式のままでなければならない場合、b
サブセットは次のように実装できます。
function arraysubset(a, b)
local s = set(b)
for _, el in pairs(a) -- changed to iterate over values of the table
if not s[el] then
return false
end
end
return true
end