计算 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
我正在尝试对 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 tablet
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 integern
. 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