2014-09-29 64 views
2

删除我有两个表,例如:table.insert /按价值

table1 = { element1, element2, element3, element4 } 
table2 = { element1, element3 } 

表2是指表1的一些元素,但我不知道究竟哪,也不知道他们的指数。 现在,我想检查一下特定的元素,看看table2是否包含它,并在案例中插入/删除它。

是跃升到我的脑海里的第一件事是:

table.remove/insert(table2, table1.elementX) 

但由于插入/删除不按索引查找它,这是行不通的。 当然,我可以遍历整个表格,直到找到元素并将其移除,直到迭代完成而不匹配并插入它为止。

但是,有没有一个更高性能的方法来做到这一点?

我不想填充table2与空字段为匹配索引上的元素。

+0

你真的想用这个解决什么问题? – lhf 2014-09-29 10:57:13

+0

不好意思?我想插入/删除table1的一个元素到table2,取决于它是否已经在里面。 – Sempie 2014-09-29 11:26:53

+0

您的意思是table1是一个引用,如果table2不包含table1中的元素,则需要将该元素添加到table2,其中如果table2具有不在table1中的元素,则要删除该元素从table1?但是如果是这样的话,那么你最终会得到table1 = table2,那么这肯定不是你想要的,你能澄清吗? – Schollii 2014-09-29 12:47:41

回答

0
for k,v in pairs(table1)do 
    if v == table2[index] then 
    table.remove/insert(table1, k) 
    break 
end 

当然这可以,但我仍然希望有一个更高性能的解决方案。 由于在table1中有多个1000个entrys并且在table2中有多个100个entrys,这会导致高CPU使用率,这是我想要避免的。 (编程只有200MHz的控制器)

+1

你不能在'table1'的遍历中使用'table.insert(table1,x)',因为它可能会创建新的字段。 – lhf 2014-09-29 11:03:59

+0

这里没有问题。 – Sempie 2014-09-29 11:25:40

0

先恢复table2

table2reverse = {} 
for k,v in pairs(table2) do table2reverse[v]=k end 

那么做到这一点:

for k,v in pairs(table1)do 
    if table2reverse[v] then 
    table1[k]=nil 
end 

最后紧凑table1

+0

另请参阅http://stackoverflow.com/a/12397742/107090。 – lhf 2014-09-29 11:01:50

+0

我不知道你打算在插入案例中做什么。 – lhf 2014-09-29 11:02:59

+1

你的意思是反转?请注意,这会杀死重复值(这里似乎不是问题)。 – Deduplicator 2014-09-29 11:20:43