Lua:只有在表中尚未添加到表中的最智能方式,或删除重复项

时间:2011-07-08 00:56:53

标签: lua

我有一个字符串表。我想要一种简单的方法来删除表中的所有重复项。

因此,如果表格为{a, b, c, c, d, e, e},则此操作后将为{a, b, c, d, e}

或者,也许最好是,有一种方法可以将一个元素添加到表中,但前提是它还没有包含在表中。

< \ noobquestion>

3 个答案:

答案 0 :(得分:8)

听起来你正在尝试实现一个独特元素集合。本文可能对您有所帮助:http://www.lua.org/pil/13.1.html

答案 1 :(得分:7)

我通常为此做的是索引字符串上的表格,例如

tbl[mystring1] = 1
tbl[mystring2] = 1

当你添加一个字符串时,你只需使用上面的行,重复就会被处理掉。然后,您可以使用for ... pair do循环来读取数据。

如果要计算出现次数

使用类似

的内容
if tbl[mystring1] == nil then
  tbl[mystring1] = 1
else
  tbl[mystring1] = tbl[mystring1] + 1
end

如果您需要转动桌子,那么在添加周期结束时您可以使用类似

的内容
newtbl = {}
for s,c in pairs(tbl) do
  table.insert(newtbl,s)
end

答案 2 :(得分:4)

最简单的方法是在“容器表”中使用表作为键,而不是值。

让我们调用容器表values。您当前必须执行类似的操作才能向其中添加元素:

table.insert(values, value)

你像这样解析values

for i,v in ipairs(values) do
  -- v contains the internal values
end

为了让表只有一次,你可以用其他方式插入它们:

t[value] = 1

这将确保插入的值(字符串,表格,数字等等)只包含一次,因为它们将被“覆盖”。

然后你可以像这样解析t

for k,_ in pairs(values) do
  -- k contains the internal tables
end