使用字符串键索引时错误的lua表大小

时间:2012-05-22 02:26:52

标签: lua

通常,为了获得表大小,标准表库函数#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

它完全按照我的预期显示表的内容,但其计数不是。

有人帮助我吗?

提前致谢。

1 个答案:

答案 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是否可以检查。