如何在Lua中检查表中是否包含元素?
2013-4-20 9:33:29
收藏:0
阅读:570
评论:5
有没有一种方法可以检查表格中是否包含某个值?我有自己的(天真的)函数,但我想知道是否存在某些“官方”的方法?或者其他更有效的方法...
function table.contains(table, element)
for _, value in pairs(table) do
if value == element then
return true
end
end
return false
end
顺便说一下,我使用这个函数的主要原因是将表格用作集合,即不含重复元素。还有其他我可以使用的东西吗?
原文链接 https://stackoverflow.com/questions/2282444
点赞
stackoverflow用户189205
你可以将值作为表的键。例如:
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
这里有一个更全面的示例链接。
2010-02-17 16:44:03
stackoverflow用户41661
根据你的表示,你的函数已经达到了最高效的程度。当然,正如其他人所指出的(以及在比 Lua 更早的语言中所实践的),解决你实际问题的方法是改变表示方式。当你有表格,而你想要集合时,你可以通过将设置元素作为键和“true”作为值来将表格转换为集合。+1 给 interjay。
2010-02-17 17:17:06
stackoverflow用户2739276
我知道这是一个旧帖子,但我想为后世添加一些东西。 解决你所遇到的问题的简单方法是创建另一个值到键的表。
例如,你有两个具有相同值的表,一个指向一个方向,另一个指向另一个方向。
function addValue(key, value)
if (value == nil) then
removeKey(key)
return
end
_primaryTable[key] = value
_secodaryTable[value] = key
end
function removeKey(key)
local value = _primaryTable[key]
if (value == nil) then
return
end
_primaryTable[key] = nil
_secondaryTable[value] = nil
end
function getValue(key)
return _primaryTable[key]
end
function containsValue(value)
return _secondaryTable[value] ~= nil
end
然后,你可以查询新表是否具有键“element”。这可以避免需要遍历另一个表中的每个值。
如果事实证明你实际上无法将“element”用作键,因为它不是字符串,例如,则可以添加校验和或tostring
,然后将其用作键。
为什么要这样做?如果你的表非常大,则遍历每个元素的时间将是显著的,从而阻止你经常执行操作。额外的内存开销将相对较小,因为它将存储指向相同对象的两个指针,而不是相同对象的两个副本。 如果你的表非常小,那么这将不太重要,事实上,遍历可能甚至比进行另一个映射查找更快。
但问题的措辞强烈暗示你有非常多的项目要处理。
2013-09-02 09:15:40
stackoverflow用户7087037
-- 在某个帮助函数模块中
function utils_Set(list)
local set = {}
for _, l in ipairs(list) do set[l] = true end
return set
end
-- 在你的表格中
long_table = { "v1", "v2", "v1000"}
-- 查询某个值
_set = utils_Set(long_table)
if _set["v1"] then print("是的!") end
2021-03-18 21:50:59
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我想不到其他比较值的方法,但是如果你使用集合的元素作为键,可以将值设为除nil以外的任何值。这样,您就可以快速查找而无需搜索整个表。