我想,当它在另一表中被发现删除表键和值。我一直在使用这个,但迄今为止,尽管它承认了重复的,它总是删除该表中的最后一个项目...
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
任何帮助,将不胜感激!
首先,你应该使用标准的缩进,使其更容易解析为人类阅读的代码格式的代码:
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_Remove
是nil
。当通过nil
作为索引中table.remove
除去,Lua中移除最后一个元素。治疗像一个堆栈列表时,但在这种情况下隐藏的错误你这是很方便。