通常,为了获得表大小,标准表库函数#operator可以工作。
但是,当我创建一个具有字符串键索引的表时,它不起作用。
local function addWriterIdListToTable()
local returnTable = {}
local requestString = "1234:16 5678:8 9012:1"
local idList = requestString:split(" ")
for i,v in ipairs(idList) do
local oneId = v:split(":")
returnTable[oneId[1]] = oneId[2]
end
for k,v in pairs(returnTable) do
print (k .. " " .. v)
end
print("size of table: " .. #returnTable)
return returnTable
end
我想将字符串转换为表格。 函数“split”解析一个字符串,用参数作为分隔符将其拆分,并以表格形式返回。
以下功能的执行结果如下。
1234 16
9012 1
5678 8
size of table: 0
它完全按照我的预期显示表的内容,但其计数不是。
有人帮助我吗?
提前致谢。
答案 0 :(得分:9)
#
运算符会告诉您表中最高的数字索引。如果数字索引中存在任何间隙,则可能会返回低于间隙的最高值。基本上,#
运算符只有在您将表视为密集数组时才能正常工作。
如果您确实想知道表格中有多少条目,您需要使用pairs()
函数对其进行迭代,并计算您获得的项目数。
function countTableSize(table)
local n = 0
for k, v in pairs(table) do
n = n + 1
end
return n
end
虽然我想知道为什么你甚至需要知道表中有多少条目。通常情况下,您关心的是表格是否为空,您只需查看next(table) == nil
是否可以检查。