基本上我有一个对象表,每个对象都有一个特定的字段,它是一个数字。我试图看看这些数字条目是否匹配,我想不出办法。我想可能是一个双循环,一个循环遍历表,另一个循环,但是这不会导致两个值被比较两次?我担心它似乎在表面上起作用但实际上有微妙的错误。这就是我描绘代码的方式:
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
我想将所选对象(如表格)插入到另一个没有任何重复项的预制对象中。
答案 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