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

テーブルの内容は思ったとおりに表示されますが、カウントは表示されません。

誰か助けてくれませんか?

前もって感謝します。

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

なぜあなたはテーブルにいくつのエントリーがあるのか​​を知る必要があるのだろうかと思いますが。通常、気になるのはテーブルが空かどうかだけです。それを確認するには、を確認するだけですnext(table) == nil

于 2012-05-22T02:33:49.727 に答える