试图比较Lua中一个表的所有条目

时间:2013-03-11 23:32:47

标签: lua

基本上我有一个对象表,每个对象都有一个特定的字段,它是一个数字。我试图看看这些数字条目是否匹配,我想不出办法。我想可能是一个双循环,一个循环遍历表,另一个循环,但是这不会导致两个值被比较两次?我担心它似乎在表面上起作用但实际上有微妙的错误。这就是我描绘代码的方式:

for i = #table, 1, -1 do
    for j = 1, #table do
        if( table[i].n == table[j].n ) then
            table.insert(table2, table[i])
            table.insert(table2, table[j])
        end
    end
end

我想将所选对象(如表格)插入到另一个没有任何重复项的预制对象中。

1 个答案:

答案 0 :(得分:1)

让外部循环遍历表,让内部循环始终在外部循环之前启动一个元素 - 这样可以避免重复计算并将对象与自身进行比较。此外,如果您调用该表,则需要检查table,这可能会隐藏您要访问table的{​​{1}}库。因此,假设您调用输入表insert

t

但是,如果三个或更多元素具有相同的值for i = 1, #t do for j = i+1, #t do if( t[i].n == t[j].n ) then table.insert(table2, t[i]) table.insert(table2, t[j]) end end end ,您将多次添加其中一些元素。您可以使用另一个表来记住您已插入的元素:

n

我承认这不是很优雅,但在这里已经很晚了,我的大脑拒绝考虑更整洁的方法。

编辑:实际上......使用另一个表格,您可以将其减少到一个循环。当您遇到新的local done = {} for i = 1, #t do for j = i+1, #t do if( t[i].n == t[j].n ) then if not done[i] then table.insert(table2, t[i]) done[i] = true end if not done[j] then table.insert(table2, t[j]) done[j] = true end end end end 时,在n添加一个新值作为帮助表中的键 - 值将是您刚刚分析的n。如果您遇到表中已有的t[i],则将该已保存的元素和当前的元素添加到目标列表中 - 您还可以使用n替换辅助表中的元素或不是桌子的东西:

true