确定 Lua 表是否为空(不包含任何条目)的最有效方法是什么?
2016-5-4 15:50:53
收藏:0
阅读:384
评论:8
什么是确定表格是否为空(即当前既没有数组样式值也没有字典样式值)的最有效方法?
目前,我正在使用next()
:
if not next(myTable) then
-- 表格为空
end
还有更有效的方法吗?
注意:在这里,“#”运算符不足够,因为它仅对表格中的数组样式值进行操作-因此#{test=2}
与# {}
不可区分,因为两者都返回0。 还要注意的是,检查表变量是否为“nil”是不足够的,因为我不是在寻找nil值,而是在寻找带有0个条目的表格(即{}
)。
原文链接 https://stackoverflow.com/questions/1252539
点赞
stackoverflow用户41661
你的代码很高效,但是有误。(考虑 {[false]=0}
。) 正确的代码是
if next(myTable) == nil then
-- myTable 是空的
end
为了达到最大的效率,你应该将 next
绑定到一个局部变量上,例如,
...
local next = next
...
... if next(...) ...
(当 next
是局部变量时,代码通过常数时间的索引操作访问一个“upvalues”数组中的原始函数 next
。当 next
是全局变量时,要找到 next
就要在“环境”哈希表中索引,其中包含了全局变量的值。这个索引操作仍然是常数时间,但比局部变量的数组查找要慢得多。)
2009-08-10 01:14:35
stackoverflow用户1327727
这可能是您想要的:
function table.empty (self)
for _, _ in pairs(self) do
return false
end
return true
end
a = { }
print(table.empty(a))
a["hi"] = 2
print(table.empty(a))
a["hi"] = nil
print(table.empty(a))
输出:
true
false
true
2012-04-11 22:34:55
stackoverflow用户6284567
我知道这篇文章已经过时了,也许我有些地方理解不正确,但是如果你只是想清空表格,那么你可以通过简单地重新创建表格来清空它,除非你只是想检查它是否为空,而不是真正地希望或需要它为空,除非我理解有误。可以使用以下语法来完成。
yourtablename = {} --当我需要清空一个表格时,这个方法对我是有效的。
2016-05-04 12:31:59
stackoverflow用户6763451
尝试使用 #
。它会返回表中的所有实例。如果表中没有实例,则返回 0
如果 #myTable==0 then
print('此表中没有实例')
end
2017-01-04 02:03:08
stackoverflow用户10740269
建议避免对 __eq
进行重载的评估。
if rawequal(next(myTable), nil) then
-- myTable 为空
end
或者
if type(next(myTable)) == "nil" then
-- myTable 为空
end
2018-12-03 17:43:43
stackoverflow用户9155965
尝试使用 serpent,适用于我
serpent = require 'serpent'
function vtext(value)
return serpent.block(value, {comment=false})
end
myTable = {}
if type(myTable) == 'table' and vtext(myTable) == '{}' then
-- myTable is empty
end
2019-05-18 19:29:52
stackoverflow用户1596551
如果 endmyTable[1]
为空,则执行以下操作:
-- myTable is empty
2019-05-31 19:53:04
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
一种可能的方法是使用元表中的“newindex”键计算元素数量。当分配不为
nil
的内容时,增加计数器(计数器也可以在元表中),当分配nil
时,减少计数器。检查空表将使用计数器为0进行检查。
这是指向元表文档的指针:metatable documentation
我确实喜欢你的解决方案,而且我也不能假设我的解决方案在总体上更快。