如何检查表中是否包含Lua中的元素?

Woo*_*kai 90 lua contains unique set lua-table

有没有检查表是否包含值的方法?我有自己的(幼稚)功能,但我想知道是否存在"正式"的东西?或者更高效的东西......

function table.contains(table, element)
  for _, value in pairs(table) do
    if value == element then
      return true
    end
  end
  return false
end
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我使用这个函数的主要原因是使用表作为集合,即没有重复的元素.还有其他我可以使用的东西吗?

int*_*jay 114

您可以将值作为表的键.例如:

function addToSet(set, key)
    set[key] = true
end

function removeFromSet(set, key)
    set[key] = nil
end

function setContains(set, key)
    return set[key] ~= nil
end
Run Code Online (Sandbox Code Playgroud)

还有一个功能更全面例如这里.

  • 匿名用户为您的代码提出了以下修复:如果具有指定键的集合中的值为FALSE,则函数setContains()返回false,尽管表中有一个具有指定键的项.行"return set [key]〜= nil"修复了该错误. (13认同)
  • 也许还有 `function keysOfSet(set) local ret={} for k,_ inpairs(set) do ret[#ret+1]=k end return ret end` (2认同)

Nor*_*sey 24

鉴于您的表示,您的功能与可以完成的效率一样高效. 当然,正如其他人所指出的那样(并且在比Lua更早的语言中实践),解决您真正的问题的方法是改变表示.如果有表并且需要集,则可以使用set元素作为键和true值来将表转换为集合.+1对话.