lua中table的常用方法
阿新 • • 發佈:2018-11-07
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