LUA:在另一个表中找到一个值时,尝试从该表中删除该值

时间:2019-02-04 01:12:45

标签: 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( "Shared target is "..v[2], 40):ToBlue()
 table.remove (Iranian_Protected_Groups, Key_To_Remove)
 end
 end
 end

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

首先,您应该使用标准缩进来格式化代码,以使其更易于解析,就像人类阅读代码一样:

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 s。

如果将return nil语句移到循环外,则您的函数将被固定。 (尽管对于大多数目的来说,它是多余的,因为通常没有值等于返回nil。)

之前,Key_To_Removenil。当传递nil作为要在table.remove中删除的索引时,Lua将删除最后一个元素。在将列表视为堆栈时,这很方便,但在这种情况下会为您隐藏一个错误。