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

Col*_*ips 8 lua

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

因此,如果表是{a, b, c, c, d, e, e},在此操作之后它将是{a, b, c, d, e}

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

<\noobquestion>

2rs*_*2ts 8

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


Jan*_*e T 7

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

tbl[mystring1] = 1
tbl[mystring2] = 1
Run Code Online (Sandbox Code Playgroud)

等等

添加字符串时,只需使用上面的行,就可以使用重复的字符串.然后,您可以使用for ...对do循环来读取数据.

如果要计算出现次数

使用类似的东西

if tbl[mystring1] == nil then
  tbl[mystring1] = 1
else
  tbl[mystring1] = tbl[mystring1] + 1
end
Run Code Online (Sandbox Code Playgroud)

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

newtbl = {}
for s,c in pairs(tbl) do
  table.insert(newtbl,s)
end
Run Code Online (Sandbox Code Playgroud)


kik*_*ito 5

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

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

table.insert(values, value)
Run Code Online (Sandbox Code Playgroud)

你这样解析values

for i,v in ipairs(values) do
  -- v contains the internal values
end
Run Code Online (Sandbox Code Playgroud)

为了只有一次表格,您可以通过其他方式插入它们:

t[value] = 1
Run Code Online (Sandbox Code Playgroud)

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

然后你可以这样解析t

for k,_ in pairs(values) do
  -- k contains the internal tables
end
Run Code Online (Sandbox Code Playgroud)