LUA:尝试从找到的另一个表中删除表中的值

我正在尝试在找到另一个表中的键和值时从表中删除它们。 到目前为止,我一直在使用以下代码,尽管它可以识别重复的值,但它总是删除表中的最后一项...

function get_key_for_value( t, value )
 for k,v in pairs(t) do
 if v==value then return k
 end
 return nil
 end
 end

 for k,v in pairs (Iranian_Protected_Groups) do
 v[6] = 0
 if Springfield_3_Target_Name == v[2] then
 v[6] = v[6] + 1
 if v[6] > 0 then
 local Key_To_Remove = get_key_for_value (Iranian_Protected_Groups, v)
 MESSAGE:New( "共享目标是"..v[2], 40):ToBlue()
 table.remove (Iranian_Protected_Groups, Key_To_Remove)
 end
 end
 end

任何帮助都将不胜感激!

点赞
用户2616735
用户2616735

首先,你应该使用标准缩进格式化你的代码,以便于人类阅读代码时更容易解析:

function get_key_for_value(t, value)
    for k, v in pairs(t) do
        if v == value then
            return k
        end
        return nil
    end
end

仔细看看 for 循环。你将永远无法通过第一次迭代,因为每次迭代都会 return

如果你将 return nil 语句移出循环,你的函数就得到修复了。(虽然对大多数情况而言,此步骤是多余的,因为通常没有返回 nil 值与返回相等的情况)。

原来,Key_To_Removenil。当在 table.remove 中将 nil 作为索引进行移除时,Lua 将删除最后一个元素。这在将列表视为栈时很方便,但在这种情况下却隐藏了一个错误。

2019-02-04 04:55:06