计算lua中的字符串索引表

Posted

技术标签:

【中文标题】计算lua中的字符串索引表【英文标题】:counting string-indexed tables in lua 【发布时间】:2015-03-15 00:12:25 【问题描述】:

我正在尝试计算一个表中的元素,该表中的一些元素用字符串索引。当我尝试使用 # 运算符时,它只会忽略字符串索引的运算符。示例:

local myTab = 1,2,3
print(#myTab)

将返回 3

local myTab = 
myTab["hello"] = 100
print(#myTab)

将返回 0 混合它们,我试过了

local myTab = 1,2,3,nil,5,nil,7
print(#myTab)
myTab["test"] = try
print(#myTab)

返回 7 然后 3,这是正确的,因为我在某处读到 # 运算符在找到 nil 值时停止(但为什么第一次打印打印 7?)

最后,我试过了

local myT = 123,456,789
myT["test"] = 10
print(#myT)

打印 3,而不是 4

为什么?

【问题讨论】:

为什么需要对表格中的元素进行计数?您要解决的实际问题是什么? “# 运算符在找到 nil 值时停止”不正确。 Reference Manual 解释得很好。 【参考方案1】:

规则很简单,来自the length operator:

除非给出__len 元方法,否则表t 的长度仅在表是序列时才定义,即其正数字键的集合等于1..n 对于某些非负整数n。在这种情况下,n 是它的长度。

在你的例子中:

local myTab = 1,2,3,nil,5,nil,7

#mytab 未定义,因为myTab 不是一个序列,有或没有myTab["test"] = try

local myT = 123,456,789

myT是一个序列,长度为3,有无myT["test"] = 10

【讨论】:

谢谢,那么计算它们的正确方法是什么? @FedericoFallico:手动,通过迭代它们。

以上是关于计算lua中的字符串索引表的主要内容,如果未能解决你的问题,请参考以下文章

一文读懂Lua元表

遍历 Lua 表

如何通过键删除 lua 表条目?

通过命名常量访问 LUA 索引表

lua的table库中的常用函数总结

Lua Table pairs输出顺序问题 (版本差异 解决数字索引间断并兼容字符串索引)