1. 程式人生 > >lua中table的常用方法

lua中table的常用方法

table的五大操作方法:
1:table.sort()


language = {"lua","java","c#","c++"}

table.sort(language) --只有table一個引數,使用lua預設的排序方式排序
for i, v in ipairs(language) do
   -- print(v) --輸出c# c++ java lua
end

local function my_comp1(element1,element2)  --自定義比較函式 作為table.sort()引數
    return element1<element2
end
table.sort(language,my_comp1)
for i, v in ipairs(language) do
    print(v)   --輸出 c# c++ java lua
end


local function my_comp2(element1,element2)  --自定義比較函式 作為table.sort()引數
    return element1>element2
end
table.sort(language,my_comp2)
for i, v in ipairs(language) do
   -- print(v)    --輸出lua java c++ c#
end


local function my_comp3(element1,element2)  --自定義比較函式 作為table.sort()引數
    if element1==nil then
        return false
    end
    if element2==nil then
        return true
    end
    return element1>element2
end
language[2]=nil   --table中有nil存在的情況
table.sort(language,my_comp3)
for i, v in ipairs(language) do
   -- print(v)  --輸出lua c++ c#
end



2:table.insert()


tab2 = {"a",2,"b",5} --定義一個table

table.insert(tab2,2,"king")  --指定在某一位置插入某值
for i, v in ipairs(tab2) do
   -- print(v)  --輸出a king 2 b 5
end

table.insert(tab2,3)  --沒有指定位置的話,預設將值插入到末尾位置
for i, v in ipairs(tab2) do
   -- print(v)  --輸出a king 2 b 5 3
end

tab3 = {"d",7,"e"}
table.insert(tab2,tab3) -- 將table插入table
for i, v in ipairs(tab2[7]) do
    --print(v)  --輸出d 7 e
end

tab2["mm"]="mmm"   --新增一個新的鍵值對  下面的for迭代器選擇pairs才能將新的鍵值對遍歷出來,而非ipairs
for i, v in pairs(tab2) do
    print(i,v)  --輸出1 a ; 2 king ; 3 2 ; 4 b ; 5 5 ; 6 3 ; 7 table ;mm mmm
end

3:table.concat()


tab1 = {"a","b","c",5,"d"}
local aa = table.concat(tab1)
local bb = table.concat(tab1,"/")
local cc = table.concat(tab1,",",2,4)
print(aa) --輸出abc5d
print(bb)--輸出a/b/c/5/d
print(cc) --輸出b,c,5
print(type(aa)) --輸出string
print(type(bb)) --輸出string
print(type(cc)) --輸出string

--再來測試一下table.concat()的效率
local strings = {}  --定義一個區域性table
for i = 1, 100000 do
    strings[i]="hahaha"   --給這個table賦值
end

--local stringT = ""
--local startTime = os.clock()     --os.clock()獲取當前系統時間
--for i,v in ipairs(strings) do
--    stringT=stringT..v  --使用for迴圈連線字串
--end
--local endTime = os.clock()
--local usedTime = endTime-startTime
--print("for迴圈連線字串消耗的時間:"..usedTime)  --輸出13.135

local startTime = os.clock()
table.concat(strings)
local endTime = os.clock()
local usedTime=endTime-startTime
print("使用table.concat()連線字串所消耗的時間:"..usedTime) --輸出0.01(快了不是一點半點)



4:table.remove()


tab4 = {1,4,"tt","jj"}

table.remove(tab4,1) --移除指定位置的table值,若沒有指定位置,則預設移除最後一位的元素

for i, v in ipairs(tab4) do
    print(v)  --輸出 4 tt jj
end

5:unpack()


tab5 = {"b","v","b","f","a"}

print( unpack(tab5,1,3)) --輸出b v b
print(unpack(tab5))  --輸出b v b f a