lua常用操作

3472 ワード

---           key 
---@param tableTemp       
---@param key  
function ContainsKey(tableTemp, key)
    if tableTemp == nil then
        return false
    end
    for k, v in pairs(tableTemp) do
        if k == key then
            return true
        end
    end
    return false
end

---           value 
---@param tableTemp       
---@param value  
function ContainsValue(tableTemp, value)
    if tableTemp == nil then
        return false
    end

    for k, v in pairs(tableTemp) do
        if v == value then
            return true
        end
    end
    return false
end

---             
---@param tableTemp        
---@param value  
function ArrayContains(tableTemp, value)
    if tableTemp == nil then
        return false
    end

    for i=1,#tableTemp,1 do
        if tableTemp[i] == value then
            return true
        end
    end
    return false
end

---@desc   table  ,   1  
---@param tableTemp      table
---@return table  ,   1  
function GetTableLength(tableTemp)
    if type(tableTemp) ~= "table" then
        print("    ")
        return
    end
    local len = 0
    for k, v in pairs(tableTemp) do
        len = len + 1
    end
    return len
end

---@desc           
---@param tableTemp      table
---@param key           
function RemoveByKey(tableTemp,key)
    for k,v in pairs(tableTemp) do
        if k == key then
            tableTemp[k] = nil
        end
    end
end

---@desc   Value        (     )
---@param array       
---@param value   value 
---@param removeadll           
---@return         
function RemoveByValue(array, value, removeadll)
    --    deleteNum    /      ; i/max     while  
    local deleteNum,i,max=0,1,#array
    while i<=max do
        if array[i] == value then
            --                
            table.remove(array,i)
            --          
            deleteNum = deleteNum+1
            i = i-1
            --      while    
            max = max-1
            --               value 
            if not removeadll then break end
        end
        i= i+1
    end
    --          
    return deleteNum
end

Luaを用いた開発の過程でtableに対する処理は頻繁であるが,ここでtableを整理する.义齿removeという2つの関数の使い方と、使用中に注意しなければならない点!
table.insert(list, [pos, ]value)
表リストのpos位置に要素valueを挿入し、pos位置とpos位置の後ろにある要素を後ろに移動します.posはオプションパラメータで、デフォルト値は#list+1なのでtable.insert(list,value)は、要素valueをテーブルlistの末尾に挿入します.
local tbl = {1, 2, 3, 4, 5}
 
table.insert(tbl, 3, 666)
print(unpack(tbl))
-- 1   2   666 3   4   5
 
table.insert(tbl, 999)
print(unpack(tbl))
-- 1   2   666 3   4   5   999

table.remove(list[, pos])
テーブルリストのpos位置の要素を削除し、必要に応じてpos位置の後ろにある要素を前に移動して、削除された値を返します.posはオプションパラメータで、デフォルト値は#listなのでtable.remove(list)はテーブルlistの最後の要素を除去します!
local tbl = {1, 2, 3, 4, 5}
 
local ele = table.remove(tbl, 4)
print(ele)
print(unpack(tbl))
-- 4
-- 1   2   3   5
 
ele = table.remove(tbl)
print(ele)
print(unpack(tbl))
-- 5
-- 1   2   3

特に注意:forループで削除操作を行う場合は、後ろから前へ逆順に繰り返すべきで、前から後ろへ順番に繰り返すといくつかの項目が漏れてしまう可能性があります!
local tbl = {1, 2, 2, 3, 4, 5}
--     :   pos 2     ,pos 3             
for k, v in pairs(tbl) do
    if v == 2 then
        table.remove(tbl, k)
    end
end
print(unpack(tbl))
-- 1   2   3   4   5
 
tbl = {1, 2, 2, 3, 4, 5}
--     : for              
for i = #tbl, 1, -1 do
    if tbl[i] == 2 then
        table.remove(tbl, i)
    end
end
print(unpack(tbl))
-- 1   3   4   5