2012-05-22 32 views
2

通常用于获取表大小,标准表库函数#运算符工作。使用字符串键索引时错误的lua表大小

但是,当我做一个表中有一个字符串键索引,它不起作用。

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 

我想trsnform一个字符串到表。 函数“split”解析一个字符串,用参数分隔它作为分隔符,并返回为表格。

上述功能的结果如下所示。

1234 16 
9012 1 
5678 8 
size of table: 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来查看。

+0

谢谢你的回答。我用#运算符来检查表是否为空。我将使用下一个(表格)。再次感谢:-) – solikang

相关问题