2

通常为了获取表大小,标准表库函数 # 运算符起作用。

但是,当我创建一个具有字符串键索引的表时,它不起作用。

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

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

有人帮我吗?

提前致谢。

4

1 回答 1

9

运算符告诉您表中的#最高数字索引。如果数字索引中有任何间隙,它可能会返回间隙下方的最高值。基本上,#只有当您将表格视为密集阵列时,运算符才能正常工作。

如果您真的想知道一个表中有多少条目,您需要使用该pairs()函数对其进行迭代并计算您获得了多少项目。

function countTableSize(table)
    local n = 0
    for k, v in pairs(table) do
        n = n + 1
    end
    return n
end

尽管我确实想知道为什么您甚至需要知道表中有多少条目。通常,您只关心表是否为空,您可以通过查看 if 来检查next(table) == nil

于 2012-05-22T02:33:49.727 回答