最有效的方法是确定一个表格是否为空(即,当前既不包含数组样式值,也不包含字典样式值)?
目前,我正在使用 next()
:
if not next(myTable) then
-- Table is empty
end
有没有更有效的方法?
注意:在此处,#
运算符不足以满足要求,因为它仅对表中的数组样式值进行操作 - 因此 #{test=2}
与 #{}
是无法区分的,因为两者都返回 0。还要注意,检查表变量是否为 nil
不足以满足要求,因为我不是在寻找 nil 值,而是寻找具有 0 条目的表(即 {}
)。
local next
来增加速度? - Moberglocal next
,它将使用该变量,然后向上爬到下一个块并重复这个过程。一旦超出了本地范围,它才会使用全局命名空间。这是其中一个简化版本,但最终肯定会对程序速度产生影响。 - ATacoif not
会漏掉一个情况,即当表不为空时,如答案中所述,对于表{[false]=0}
。next()
返回键,在该示例中为false
,并且if not false
会让您误以为表为空。== null
方法即使在这种情况下也可以正确工作。 - Irfy