注: 本文摘录于个人博客园
常用方法
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
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
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
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
拓展:
参考于: cocos2d/functions.lua
-- 获取表大小
-- 在lua中,针对于有序的列表也可使用使用#,但限制较多
function table.nums(t)
local count = 0
for k, v in pairs(t) do
count = count + 1
end
return count
end
-- 获取表的key集合
function table.keys(hashtable)
local keys = {}
for k, v in pairs(hashtable) do
keys[#keys + 1] = k
end
return keys
end
-- 获取表的value集合
function table.values(hashtable)
local values = {}
for k, v in pairs(hashtable) do
values[#values + 1] = v
end
return values
end
-- 将src表合并到dest表中,注意,重复的key会被后一个表替换为新的value
function table.merge(dest, src)
for k, v in pairs(src) do
dest[k] = v
end
end
-- 判定value是否在表中,如果存在则返回索引,否则为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
-- 判定value是否在表中,如果存在则返回索引,否则为nil
function table.keyof(hashtable, value)
for k, v in pairs(hashtable) do
if v == value then return k end
end
return nil
end
-- 移除表中某个值
function table.removebyvalue(array, value, removeall)
local c, i, max = 0, 1, #array
while i <= max do
if array[i] == value then
table.remove(array, i)
c = c + 1
i = i - 1
max = max - 1
if not removeall then break end
end
i = i + 1
end
return c
end
function table.map(t, fn)
for k, v in pairs(t) do
t[k] = fn(v, k)
end
end
function table.walk(t, fn)
for k,v in pairs(t) do
fn(v, k)
end
end
function table.filter(t, fn)
for k, v in pairs(t) do
if not fn(v, k) then t[k] = nil end
end
end
-- 表数值去重(bArray如果为ture, 则为顺序列表)
function table.unique(t, bArray)
local check = {}
local n = {}
local idx = 1
for k, v in pairs(t) do
if not check[v] then
if bArray then
n[idx] = v
idx = idx + 1
else
n[k] = v
end
check[v] = true
end
end
return n
end
-- Demo
local tab = {1,2,2,3,4,3,5}
local data1 = table.unique(tab, true)
local data2 = table.unique(tab, false)
print(table.concat(data1, ",")) -- 1,2,3,4,5
for i, v in pairs(data2) do
print(i, v)
end
--[[
1 1
2 2
4 3
5 4
7 5
]]
End