Lua:如果表中不存在,则最聪明地添加到表中,或删除重复项的最佳方法

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

因此,如果表格是{a, b, c, c, d, e, e},执行此操作后,它应该是{a, b, c, d, e}

或者,更好的是,有一种方法可以将元素添加到表格中,但仅当表格中没有包含该元素时才添加。

<\noobquestion>

原文链接 https://stackoverflow.com/questions/6618843

点赞
stackoverflow用户691859
stackoverflow用户691859

这似乎是你想要实现一个 Set,即一个独一无二元素的集合。这篇文章或许能对你有所帮助:http://www.lua.org/pil/13.1.html

2011-07-08 00:58:33
stackoverflow用户438753
stackoverflow用户438753

通常我会按字符串对表进行索引,例如:

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

等等。

当你添加字符串时,只需使用上面的代码,重复的会自动处理。然后可以使用 for ... pairs 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
2011-07-08 06:55:01
stackoverflow用户312586
stackoverflow用户312586

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

我们将容器表称为values。您可能目前正在执行类似于以下内容以将元素添加到其中:

table.insert(values, value)

并且您会像这样解析values

for i,v in ipairs(values) do
  -- v包含内部值
end

为了仅使用表一次,您可以以另一种方式插入它们:

values[value] = 1

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

然后您可以像这样解析values

for k,_ in pairs(values) do
  -- k包含内部表
end
2011-07-08 14:04:27