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

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

groupA = {"驴子", "山羊", "老鹰", "鲸鱼", "海豚", "狗", "蚊子", ...}
groupB = {"山羊", "蚊子", "驴子"}

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

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

点赞
用户1442917
用户1442917

Lua 中没有内置运算符来计算集合差。你可以做你描述的事情,为了加速这个过程,你可以从第二个表中构建元素的哈希表,然后遍历第一个表中的元素并检查它们是否存在于哈希表中(第二个表的元素)。

如果您在迭代时使用 table.remove 来从第一个表中删除元素,则需要小心地从末尾开始迭代,否则您可能会跳过需要删除的元素。

您还可以检查此线程中有关集合运算符的一些建议是否适合您:http://lua-users.org/lists/lua-l/2008-07/msg00646.html

2016-06-22 03:50:56
用户88888888
用户88888888
local lookup = {} -- 创建一个名为lookup的表(table)
for i, v in ipairs(groupB) do -- 循环遍历groupB表
  lookup[v] = true -- 将groupB表中的每个元素作为lookup表的键,值为true
end

local answer = {} -- 创建一个名为answer的表(table)
for i, v in ipairs(groupA) do -- 循环遍历groupA表
  if (not lookup[v]) then -- 如果lookup表中不存在groupA表中的当前元素
    table.insert(answer, v) -- 将其插入到answer表中
  end
end

注:此方法不考虑重复项。例如,如果groupB表包含三次"goat",而groupA表包含四次"goat",那么answer表将不包含"goat"。

2016-08-11 00:37:09
用户748115
用户748115

经过一段时间的研究后,我发现 Lua 中的这个简单的减法适用于组(或表格),以从另一个组中删除找到的元素。

例如:

groupA = groupA - groupB
2016-10-03 02:58:55