删除表中具有特定值的所有条目

时间:2014-09-09 11:14:53

标签: lua compare equals lua-table

我想删除表中的所有条目,它等于给定的值。 现在,我得到一个可能知道的问题,如何处理。

这是代码:

function(list_to_search_in, compared_value, invert)
    for k,v in pairs(list_to_search_in) do
        if invert and v ~= compared_value then
            table.remove(list_to_search_in, v)
        if not invert and v == compared_value then
            table.remove(list_to_search_in, v)
         end
    end
end

问题:

假设该表为{ 1, 2, 3, 2 }。因此,当我迭代循环并进入第一场比赛时,它将从表中删除。这意味着删除了值和密钥。

现在,删除值的键被分配给行中的下一个值。但由于skript将检查下一个键的值,因此永远不会检查此值(其中kay刚被更改)。

我想,一个简单的

k = k - 1

删除后会完成这项工作,但事实并非如此。

v = nil
我认为

会很棒,但只有当垃圾收集器在这一刻不能完成他的工作时,这些对才会迭代到下一个值。

有人有想法吗?我希望基于文本的提示能够解决问题。

1 个答案:

答案 0 :(得分:1)

请勿使用table.remove。它从类似数组的表中挤出“洞”。在使用pairs / next的迭代过程中不允许这样做。只需将值设置为nil即可。

如果您需要从表格中挤出孔,那么您可以创建一个新表格并仅使用您想要保留的值填充它,或者在第一个通道中执行删除操作,然后在第二个通道中挤出孔。

使用pairs时,无法保证以任何方式保证项目遍历的顺序。