Lua tableノート

1827 ワード

私がluaを使っている間のメモを記録します.
デフォルトkeyは数値の増加です
local tb={"A",[3]="C","B"}このtbは下付き1,2,3で印刷されます:ABC
ipairsとpair
ipairのキーは1からnまで順番にあり、nilに出会って遍歴を終了し、pairは順番がなく、tableを完全に遍歴する.
説明:
ipairはkey=1から累積を開始し,valがnilであるとループを終了する.
pair出力の結果はtable定義の順序と一致する(非配列は宣言の順序と一致することを保証しない).
table.insert
文法:table.Insert(挿入するtable、挿入するデータ)
next
next(table[,index])解釈:プログラムがテーブルtableのすべてのフィールドを遍歴できるようにする.彼の最初のパラメータはテーブルで、2番目のパラメータはテーブル内の有効なインデックスです.関数は、指定したインデックスの次のインデックスとインデックスの位置に対するテーブルの値を返します.2番目のパラメータをnil呼び出し関数に設定すると、テーブルの最初のインデックスとインデックスの位置の値が返されます.テーブルの最後のインデックスを使用するか、空のテーブルでnilをインデックスに使用すると、関数はnilを返します.2番目のパラメータを省略すると、デフォルトではnilと解釈されます.特にnext(t)の形式を使用して、テーブルが空であるかどうかを検出することができます.
例:
if next(self.data) then
    local item =  self.data[1]
else
    warn("      ")
end

sortソート
最初のパラメータを2番目のパラメータの前に並べたい場合は、trueを返します.提供されていない場合、sortはデフォルトの
例:受領可能なものは前に並べ、その他は時間順に並べ替えます.
---NOTE  vo1 vo2     true

table.sort(self.data, function(vo1, vo2)
    if not canRecv(vo1) and not canRecv(vo2) then
        ---     
        return vo1.initTime < vo2.initTime
    end
    if canRecv(vo1) and not canRecv(vo2) then
        return true
    end
    --- vo2 vo1   ,  false
    if canRecv(vo2) and not canRecv(vo1) then
        return false
    end
end)

table要素の削除
for(遍歴)tableを使用する場合、このtableの要素を削除しないでください
正しい方法は、削除するデータをtableにキャッシュして削除することです.
例:
function DropItemModel:DemoRemoveItem() 
    local tmpTb = {}
    for k, v in pairs(self.dropItems) do
        local dropModel = DataCenter.models[v]
        if v and  dropModel then
            table.insert(tmpTb, k)
        end
    end
    ---         
    for i = 1, #tmpTb do
        self.dropItems[tmpTb[i]] = nil
    end
end