lua table相关
1. table.insert(table,[pos,],value) 插入元素
在table数组指定pos位置插入值为value的元素,pos参数可选,默认为数组部分末尾
local a = {1,3,4} -- 方式1: 添加指定位置,其它元素依次后移 table.insert(a,2,2) local str = table.concat(a,",") print(str) -- 输出:1,2,3,4
-- 方式2: 不指定位置,会默认插入到最后,不移动其他元素 table.insert(a,5) local str = table.concat(a,",") print(str) -- 输出:1,2,3,4,5
2. table.remove(table,[,pos]) 删除元素
在table数组指定的pos位置删除元素,pos参数可选,默认为table长度,即最后一个元素位置
local a = {1,2,3,4,5} -- 方式1: 删除指定位置元素,其它元素往前移。参数:数组,key table.remove(a,2) local str = table.concat(a,",") print(str) --输出:1,3,4,5 -- 方式2:删除最后元素。参数:数组 table.remove(a) local str = table.concat(a,",") print(str) -- 输出:1,3,4
3. table.concat(table,sep,start,end) 连接元素
在table中,使用sep分割符,从start到end位置的元素,若end元素为空,则默认最后,若start为空的话,end也为空。默认全部元素。
local a = {1,2,3,4} print(table.concat(a,"|")) -- 1|2|3|4 print(table.concat(a,"-",2)) -- 2-3-4 print(table.concat(a,"-",2,3)) -- 2-3
4. table.maxn(table)
返回table中所有正数key值中最大的key值,如果不存在正数的key值,返回0。在Lua 5.2中该方法已经不存在了。
local a = {[-2] = -2, [-1] = -1} print(table.maxn(a)) -- 0 local a = {[1] = 1, [2] = 2, [1000] = 1000} print(table.maxn(a)) -- 1000
5. table.sort(table,[,comp]) ,对table进行排序,默认为升序
local a = {1,3,5,7,2} -- 不指定为升序 table.sort(a) print(table.concat(a,",")) -- 输出:1,2,3,5,7
-- 指定方法 local b = {1,3,5,7,2} table.sort(b,function(num1,num2) return num1 > num2 end) print(table.concat(b,",")) -- 输出:7,5,3,2,1
如下需要借助于cocos lua项目中的../cocos/cocos2d/functions.lua:
6. table.keys(table) 获取表所有key值
function table.keys(hashtable) local keys = {} for k, v in pairs(hashtable) do keys[#keys + 1] = k end return keys end local a = {one=1, two=2, three=3, [4] = 4} print(table.concat(table.keys(a), ",")) -- 输出:one,three,4,two
7. table.values(table) 获取表所有的values值
function table.values(hashtable) local values = {} for k, v in pairs(hashtable) do values[#values + 1] = v end return values end local a = {one=1, two=2, three=3, [4] = 4} print(table.concat(table.values(a), ",")) -- 输出: 1,3,4,2
8. table.merge(tab1,tab2) 将tab2合并到tab1中(注意:重复的key,其value会被替换)
function table.merge(dest, src) for k, v in pairs(src) do dest[k] = v end end local a = {one=1, two=2,three=3} local b = {four=4, five=5} table.merge(a,b) for i,v in pairs(a) do print(i,v) end --[[ two 2 three 3 one 1 five 5 four 4 ]] -- 注意该合并存在一个问题 local a = {one=1, two=2,three=3} local b = {one = 4, five=5} table.merge(a,b) for i,v in pairs(a) do print(i,v) end --[[ one 4 -- 原有的值由于key值相同,会被替换 three 3 five 5 two 2 ]]
9. table.indexof(table,value,begin) 从begin位置(默认1)判定value是否存在table表中,若是返回key值,否则返回false
function table.indexof(array, value, begin) for i = begin or 1, #array do if array[i] == value then return i end end return false end local tab = {[1]=1,[2]=2,[3]=3} print(table.indexof(tab,2)) -- 查找value:2,输出:2 print(table.indexof(tab,4)) -- 查找value:4, 输出:false print(table.indexof(tab,3,2)) -- 查找value:2, 从位置2开始,输出:3