计算 lua 中的字符串索引表

counting string-indexed tables in lua

我正在尝试对 table 中的元素进行计数,其中一些元素使用字符串进行索引。当我尝试使用 # 运算符时,它只会忽略字符串索引的。示例:

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

将 return 3

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

将 return 0 混合它们,我试过了

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

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

最后,我试过了

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

打印 3,而不是 4

为什么?

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

Unless a __len metamethod is given, the length of a table t is only defined if the table is a sequence, that is, the set of its positive numeric keys is equal to {1..n} for some non-negative integer n. In that case, n is its length.

在你的例子中:

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

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

local myT = {123,456,789}

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