听起来像是"让我谷歌给你"的问题,但不知怎的,我找不到答案.Lua #
运算符仅使用整数键计数条目,因此table.getn
:
tbl = {}
tbl["test"] = 47
tbl[1] = 48
print(#tbl, table.getn(tbl)) -- prints "1 1"
count = 0
for _ in pairs(tbl) do count = count + 1 end
print(count) -- prints "2"
Run Code Online (Sandbox Code Playgroud)
如何在不计算所有条目的情况下获取所有条目的数量?
u0b*_*6ae 118
您已经在问题中找到了解决方案 - 唯一的方法是迭代整个表pairs(..)
.
function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
Run Code Online (Sandbox Code Playgroud)
另外,请注意"#"运算符的定义比这更复杂.让我通过这个表来说明:
t = {1,2,3}
t[5] = 1
t[9] = 1
Run Code Online (Sandbox Code Playgroud)
根据手册,3,5和9中的任何一个都是有效的结果#t
.使用它的唯一理智方法是使用一个没有nil值的连续部分的数组.
erg*_*sys 19
您可以设置一个元表来跟踪条目数,如果经常需要这些信息,这可能比迭代更快.
Sur*_*e12 14
据我所知,获取表中条目数的最简单方法是使用“#”。#tableName 只要有编号就可以获取条目的数量:
tbl={
[1]
[2]
[3]
[4]
[5]
}
print(#tbl)--prints the highest number in the table: 5
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果它们没有编号,它就不起作用。
function GetTableLng(tbl)
local getN = 0
for n in pairs(tbl) do
getN = getN + 1
end
return getN
end
Run Code Online (Sandbox Code Playgroud)
你说得对。没有其他方法可以获取表的长度
有一种方法,但它可能令人失望:使用附加变量(或表的字段之一)来存储计数,并在每次插入时增加它。
count = 0
tbl = {}
tbl["test"] = 47
count = count + 1
tbl[1] = 48
count = count + 1
print(count) -- prints "2"
Run Code Online (Sandbox Code Playgroud)
没有其他方法,# 运算符只能在具有连续键的类似数组的表上工作。