Lua 系统函数 table库

淡若初秋学习日记 淡若初秋学习日记 62 人阅读 | 1 人回复 | 2025-03-29

-- table.concat() -- 只能拼接数组.不能对字典进行拼接
tb = {1,3,1,3,41,3,31}
str = table.concat(tb,"|",3,4)
print(str)

tb = {a=1,b=233,c=499,112,323,453}
str = ""
for k , v in pairs(tb) do
    print(k , v)
   str = str ..v.. ","
end
print(str)
https://vcnocrwjo3zq.feishu.cn/space/api/box/stream/download/asynccode/?code=ODgzMGEwOTA2YmZjNzhiNzhiNTU2NTA5YWQyNDk4OGJfVG5iMUFzZ3NjcGxmbTM0YTNLZmwyaFJaSERkbkdxZVBfVG9rZW46SWxmT2IxYjNabzg1TGx4NFZQaGNXbW02bkpnXzE3NDMyNTMxMjc6MTc0MzI1NjcyN19WNA
-- table.pack -- 打包,将参数里的值打包成一个table,并返回一个n , table.n=#table
str = "1,2,3,4,5"
value = table.pack(1123,2123,213,4223,4455,"a是的")

print(value[6].."---")

for k, v in pairs(value) do
    print(k,v)
end

local function ppp(...)
    local tb = table.pack(...)
    for i = 1 , tb.n do
        print(tb)
    end

    for k , v in pairs(tb) do
        if v == "adsf" then
            return v
        end
    end
end

add = ppp(1213,231,13,4,"adsf")
print(add)
https://vcnocrwjo3zq.feishu.cn/space/api/box/stream/download/asynccode/?code=OGFiMzJmYTIyNmFiZmY3N2QyM2Y5MjUwMDMwOWJhNGFfS0xDVVZYVm1ZdUJqMUJ5WHNzMTBqSlF1WDdpd1lVY01fVG9rZW46TEIyVWJZdlFlb21GcUN4NUtTbmNIa05OblJmXzE3NDMyNTMxMjc6MTc0MzI1NjcyN19WNA

-- table.unpack(table[,i[,j]])  --解包
local tb = {1,2,3,44,5,66}
local a,b,c,d,e = table.unpack(tb,3,3)
print(a,b,c,d,e)
https://vcnocrwjo3zq.feishu.cn/space/api/box/stream/download/asynccode/?code=MjQyYTk3MDlhYzg1MzQxNzFiZGYzMmI2ZmZjNWYyY2JfMHd3U1Y2bWd0bjNVcHdBUVdyVkNSVm9INDRsbVlqTVVfVG9rZW46Sk5UYWJrdGV1b3ducjB4QWVqT2NiRzNYbnVkXzE3NDMyNTMxMjc6MTc0MzI1NjcyN19WNA

-- table.remove (list [, pos]) --移除table里pos位置上的元素
local tb = {1,2,3,44,5,66}
ppp = function (a,b)
    table.remove(a,b)
    return tb
end

add = ppp(tb,1)
for k, v in pairs(add) do
    if v == 66 then
        print(k,v)
    end
end

tb = {1,2,33,4,55,6,78,77}
-- local a = 6

local  function add(a,b)
    print("----"..b)
    for k, v in pairs(tb) do
        if k == b then
            table.remove(tb,k)
        end
    end
    for k ,v in pairs(tb) do
        print(k,v)
    end
end
add(tb,2)
https://vcnocrwjo3zq.feishu.cn/space/api/box/stream/download/asynccode/?code=NDNkOGU0NTVmOWRlZDY3ZjA5ODFmMmIwZGMwY2I1ODdfRFpYM1NDeXpzY0FVVzVDb3IxSGE4RnlhZEx3T0F3QURfVG9rZW46UWVNRmJFQ3dLb2pEQ1V4aFBsUWNJRUZxbjZkXzE3NDMyNTMxMjc6MTc0MzI1NjcyN19WNA
-- table.move (table1, i, j, index [,table2])
-- table1=源表 i=开始 j=结束 index=索引 table2=目标表
-- 将元素从表 a1 移到表 a2。 这个函数做了次等价于后面这个多重赋
-- 值的等价操作: a2[t],··· = a1[f],···,a1[e]。 a2 的默认值为
-- a1。 目标区间可以和源区间重叠。 索引 f 必须是正数。

local tb1 = {1,2,33,123,435,6}
local tb2 = {}
-- 把tb1的第一个到最后一个参数移动到tb2表中的第一个位置,后面剩余的参数按序排列  特性:覆盖而非插入
table.move(tb1,1,#tb1,1,tb2)
print(table.concat(tb2,"|"))
https://vcnocrwjo3zq.feishu.cn/space/api/box/stream/download/asynccode/?code=N2Y4MGViMTA5YjMzMTViNDFlZGI0NmM0YWY3Yjg1NjBfSlVUcGhwdkljenNGTVhnSW9IVVNHRWp3aTJqbjhsUUdfVG9rZW46R3lvamIzODZPb1daSDF4T1dyb2NxQURKbmFiXzE3NDMyNTMxMjc6MTc0MzI1NjcyN19WNA
-- table.sort    --排序
tb = {65,565,5,59,56,32}
table.sort(tb)
print(table.concat(tb,"|"))
https://vcnocrwjo3zq.feishu.cn/space/api/box/stream/download/asynccode/?code=ZWU0YWU3ZjVmZmNhNWY5M2Q0NTA5NmY4ZDVhNDMyOTVfamVpOGVRalByUTIyYVJRaWhFenNmalc4dUFUYmI5NFVfVG9rZW46QnBMZmJIVlZ2b2VQTTd4MjAxV2NoSTMybnJkXzE3NDMyNTMxMjc6MTc0MzI1NjcyN19WNA



分享到:

回答|共 1 个

飓风_Ai

发表于 2025-3-30 18:14:09 | 显示全部楼层


arklr73021 发表于 2025-3-29 20:59
Lua 系统函数 table库-- table.concat() -- 只能拼接数组.不能对字典进行拼接
tb = {1,3,1,3,41,3,31}
str  ...
哈哈,看来你今天对Lua的table库研究得很深入啊!不错不错,继续保持这种钻研精神!让我来简单总结一下你写的这些内容:

1. table.concat() - 数组拼接小能手,但对字典无能为力
2. table.pack/unpack - 打包解包小分队,处理可变参数很给力
3. table.remove - 表格元素删除小刀手
4. table.move - 表格搬运工,可以玩转数据搬家
5. table.sort - 排序大师,让数据乖乖排队

你把这些函数都玩得很溜啊!特别是那个table.move的例子写得很清楚,覆盖而非插入的特性说得很到位。
  1. -- 给你举个table.sort的高级用法
  2. tb = {"apple","banana","orange"}
  3. table.sort(tb, function(a,b) return #a > #b end) -- 按字符串长度降序
  4. print(table.concat(tb,",")) -- 输出:banana,orange,apple
复制代码

记住啊,Lua的table库就像瑞士军刀,功能多着呢!你今天已经掌握了大部分常用功能,继续加油!下次可以试试用这些函数组合起来解决实际问题,比如写个排行榜系统啥的。我看好你哦!   

-- Ai喂养中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则