如何将 GROUP B 中找到的所有元素删除到 Lua 中的 GROUP A
How to remove all elements found in GROUP B to GROUP A in Lua
假设我在 Lua 脚本中定义了两个组
groupA = {"donkey", "goat", "eagle", "whale", "dolphine", "dog", "mosquito", ...}
groupB = {"goat", "mosquito", "donkey"}
删除操作后,groupA的值没有更多元素:"goat"、"mosquito"和"donkey"
如何删除 groupA
中所有在 groupB
中找到的项目。我知道我们可以遍历项目并比较每个项目,但我更喜欢任何 API 或解决此类问题的简单内置语句。元素也可以是任何类型,如记录。
Lua 中没有计算集合差异的内置运算符。您可以执行您描述的操作并加快此过程,您可以从第二个 table 构建元素哈希,然后遍历第一个 table 中的元素并检查它们是否存在于哈希中(第二个 table 中的元素)。
如果你在迭代时最终使用table.remove
从第一个table移除元素,你需要小心从末尾开始迭代,否则你可能会跳过你需要的元素删除。
您还可以检查一些建议 in this thread about set operators 是否适合您。
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
中的唯一项创建一个查找 table
- 遍历
groupA
并查找查找中的每一项table
- 将在查找 table 中找到的
groupA
未 的项目添加到 answer
table
注意:此方法不考虑重复项。例如,如果 groupB
包含三次 "goat"
,而 groupA
包含四次 "goat"
,则 answer
将包含零次 "goat"
。
经过一段时间的研究,我发现 Lua 中的这个简单减法适用于组(或 table),可以从另一个组中删除在一个组中找到的元素。
例如
groupA = groupA - groupB
假设我在 Lua 脚本中定义了两个组
groupA = {"donkey", "goat", "eagle", "whale", "dolphine", "dog", "mosquito", ...}
groupB = {"goat", "mosquito", "donkey"}
删除操作后,groupA的值没有更多元素:"goat"、"mosquito"和"donkey"
如何删除 groupA
中所有在 groupB
中找到的项目。我知道我们可以遍历项目并比较每个项目,但我更喜欢任何 API 或解决此类问题的简单内置语句。元素也可以是任何类型,如记录。
Lua 中没有计算集合差异的内置运算符。您可以执行您描述的操作并加快此过程,您可以从第二个 table 构建元素哈希,然后遍历第一个 table 中的元素并检查它们是否存在于哈希中(第二个 table 中的元素)。
如果你在迭代时最终使用table.remove
从第一个table移除元素,你需要小心从末尾开始迭代,否则你可能会跳过你需要的元素删除。
您还可以检查一些建议 in this thread about set operators 是否适合您。
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
中的唯一项创建一个查找 table
- 遍历
groupA
并查找查找中的每一项table - 将在查找 table 中找到的
groupA
未 的项目添加到answer
table
注意:此方法不考虑重复项。例如,如果 groupB
包含三次 "goat"
,而 groupA
包含四次 "goat"
,则 answer
将包含零次 "goat"
。
经过一段时间的研究,我发现 Lua 中的这个简单减法适用于组(或 table),可以从另一个组中删除在一个组中找到的元素。
例如
groupA = groupA - groupB