如何查找一个数组是否是另一个数组的子集?
How to find if an array is subset of another array?
在 Python 中我们可以使用 set 或 itertools 来找到另一个列表的一个列表的子集,我们如何在 Lua 中做同样的事情?
a = {1,2,3}
b = {2,3}
如何检查 b 是否是 a 的子集?
集合可以在 Lua 中实现,使用 table 作为成员测试的查询 (as done in Programming in Lua)。 table 中的键是集合的元素,如果元素属于集合,则值为 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}
在这种形式下写集操作也很简单 (as here)。
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
在 Python 中我们可以使用 set 或 itertools 来找到另一个列表的一个列表的子集,我们如何在 Lua 中做同样的事情?
a = {1,2,3}
b = {2,3}
如何检查 b 是否是 a 的子集?
集合可以在 Lua 中实现,使用 table 作为成员测试的查询 (as done in Programming in Lua)。 table 中的键是集合的元素,如果元素属于集合,则值为 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}
在这种形式下写集操作也很简单 (as here)。
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