LUA:试图删除从表中的值,当它在另一表中被发现

问题描述 投票:1回答:1

我想,当它在另一表中被发现删除表键和值。我一直在使用这个,但迄今为止,尽管它承认了重复的,它总是删除该表中的最后一个项目...

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

任何帮助,将不胜感激!

lua
1个回答
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循环仔细看。你永远不会让过去的第一次迭代,因为每次迭代returns。

如果您移动return nil声明外循环您的函数是固定的。 (虽然对于大多数用途而言,是多余的,因为通常没有值相当于返回nil)。

之前,Key_To_Removenil。当通过nil作为索引中table.remove除去,Lua中移除最后一个元素。治疗像一个堆栈列表时,但在这种情况下隐藏的错误你这是很方便。

© www.soinside.com 2019 - 2024. All rights reserved.