lua 之 table

注: 本文摘录于个人博客园

常用方法

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹤九日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值