如何删除在B组中找到的所有元素到Lua中的GROUP A.

时间:2016-06-22 03:12:04

标签: lua lua-table

假设我在我的Lua脚本中定义了两个组

groupA = {"donkey", "goat", "eagle", "whale", "dolphine", "dog", "mosquito", ...}
groupB = {"goat", "mosquito", "donkey"}

在删除操作之后,groupA的值没有更多元素:"山羊","蚊子"和"驴"

如何删除groupA中找到的groupB中的所有项目。我知道我们可以遍历项目并比较每个项目,但我更喜欢任何API或简单的内置语句来解决这类问题。元素也可以是任何类型的记录。

3 个答案:

答案 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
相关问题