我想删除表中的所有条目,它等于给定的值。 现在,我得到一个可能知道的问题,如何处理。
这是代码:
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
我认为会很棒,但只有当垃圾收集器在这一刻不能完成他的工作时,这些对才会迭代到下一个值。
有人有想法吗?我希望基于文本的提示能够解决问题。
答案 0 :(得分:1)
请勿使用table.remove
。它从类似数组的表中挤出“洞”。在使用pairs
/ next
的迭代过程中不允许这样做。只需将值设置为nil
即可。
如果您需要从表格中挤出孔,那么您可以创建一个新表格并仅使用您想要保留的值填充它,或者在第一个通道中执行删除操作,然后在第二个通道中挤出孔。
使用pairs
时,无法保证以任何方式保证项目遍历的顺序。