假设我在我的Lua脚本中定义了两个组
groupA = {"donkey", "goat", "eagle", "whale", "dolphine", "dog", "mosquito", ...}
groupB = {"goat", "mosquito", "donkey"}
在删除操作之后,groupA的值没有更多元素:"山羊","蚊子"和"驴"
如何删除groupA
中找到的groupB
中的所有项目。我知道我们可以遍历项目并比较每个项目,但我更喜欢任何API或简单的内置语句来解决这类问题。元素也可以是任何类型的记录。
答案 0 :(得分:2)
没有内置运算符可以计算Lua中的集合差异。您可以执行您所描述的操作并加快此过程,您可以从第二个表构建元素的散列,然后迭代第一个表中的元素并检查它们是否存在于散列中(第二个表中的元素) )。
如果您在迭代时最终使用table.remove
从第一个表中删除元素,则需要小心从最后进行迭代,否则您最终可能会跳过需要删除的元素。
您还可以检查某些建议in this thread about set operators是否适合您。
答案 1 :(得分:0)
local lookup = {}
for i, v in ipairs(groupB) do
lookup[v] = true
end
local answer = {}
for i, v in ipairs(groupA) do
if (not lookup[v]) then
table.insert(answer, v)
end
end
groupB
groupA
并查找查找表中的每个项目groupA
而不是中的项目添加到answer
表注意:此方法不考虑重复。例如,如果groupB
包含"goat"
三次,groupA
包含"goat"
四次,那么answer
将包含"goat"
次零。< / p>
答案 2 :(得分:0)
经过一段时间的研究,我发现Lua中的这个简单减法适用于组(或表)从一个组中删除组中的元素。
实施例
groupA = groupA - groupB