lua中的table函式庫
本文轉自http://www.cnblogs.com/whiteyun/archive/2009/08/10/1543139.html
一部分的table函式只對其陣列部分產生影響,而另一部分則對整個table均產生影響。
table.concat(table,sep,start,end)
concat是concatenate(連鎖,連線)的縮寫, table.concat()函式列出引數中指定table的陣列部分從start位置到end位置的所有元素,元素間以指定的分隔符(sep)隔開, 除了table外,其他的引數都不是必須的,分隔符的預設值是空字元,start的預設值是1, end的預設值是陣列部分的總長。
sep,start,end 這三個引數是順序讀入的, 所以雖然他們都不是必須引數,但如果要指定靠後的引數,必須同時指定前面的引數
tbl = {"alpha", "beta", "game"}
print(table.concat(tbl))
-- 列印結果是alphabetagame
print(table.concat(tbl,nil,1,2))
-- 列印結果是alphabeta
print(table.concat(tbl,"\n",2,3))
-- 列印結果是
--beta
--game
table.insert(table,pos,value)
table.insert()函式在table的陣列部分指定位置(pos)插入值為value的一個元素。pos引數可選,預設為陣列部分末尾
tbl = {"alpha","beta", "game"}
table.insert(tbl,"delta")
table.insert(tbl,"epsilon")
print(table.concat(tbl,","))
-- 列印結果是 “alpha","beta","game","delta","epsilon"
table.insert(tbl,3,"zeta")
print(table.concat(tbl,","))
-- 列印結果是 "alpha", "beta", "zeta", "delta", "epsilon"
table.maxn(table)
table.maxn()函式返回指定table中所有正數key值中最大的key值,如果不存在key值為正數的元素,則返回0此函式不限於table的陣列部分
tbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"}
print(#tbl)
-- 列印結果是3 因為26和之前的數字不連續,所以不算在陣列部分內
print(table.maxn(tbl))
-- 列印結果是26
tbl[91.32] = true
print(table.maxn(tbl))
-- 列印結果是91.32
table.remove(table,pos)
table.remove()函式刪除並返回table陣列部分位於pos位置的元素,其後的元素會被依次遷移,pos引數可選,預設為table長度,即從最後一個元素刪除
tbl = {[1] = "a", [2] = "b", [3] = "c", ["a"] = "z"}
print(table.concat(tbl,","))
-- 列印結果是"a","b","c" concat只能用於table中的陣列部分
table.remove(tbl)
print(table.concat(tbl,","))
-- 列印結果是"a","b"
table.insert(tbl,3,"ds")
table.remove(tbl,2)
print(table.concat(tbl,","))
-- 列印結果是"a","ds"
table.sort(table,comp)
table.sort() 函式對給定的table進行升序排序
tbl = {"alpha", "beta", "game", "delta"}
table.sort(tbl)
print(table.concat(tbl,", "))
-- 列印結果是alpha, beta, delta, game
tbl1 = {"alpha", "beta", "delta", "game"}
table.sort(tbl1)
print(table.concat(tbl1,", "))
-- 列印結果是alpha, beta, delta, game
引數comp是一個可選的引數,此引數是一個外部函式, 可以用來自定義sort函式的排序標準。
此函式應滿足以下條件:接受兩個引數(依次為a,b), 並返回一個布林型的值, 當a應該排在b前面時,返回true,反之返回false
tbl = {"alpha", "beta", "game", "delta"}
function sortFunc(a,b)
return b < a
end
table.sort(tbl,sortFunc)
print(table.concat(tbl,", "))
-- 這樣排序後就是降序排序了
table.foreachi(table,function(i,v))
會期望一個從1(數字1)開始的連續整數返回, 遍歷table中的key和value逐對進行function(i,v)操作
tbl = {2,4,6,language = "Lua", version = "5",8,10 ,12, web = "hello lua"}
table.foreachi(tbl, function(i, v) print (i,v) end)
print("--------------------------------------------------------");
table.foreach(tbl, function(i, v) print(i, v) end)
table.foreach(table,function(i,v))
與foreachi不同的是,foreach會對整個表示式迭代
table.getn(table)
返回table中元素的個數