当前位置: 首页 > news >正文

lua table常用函数汇总

在 Lua 中,table 是最核心的数据结构,几乎所有复杂数据都依赖表来实现。Lua 标准库提供了一系列操作表的函数,主要集中在 table 模块中。以下是常用的 table 函数及其用法:

1. table.insert(t, [pos,] value)

功能:向表 t 中插入元素

  • pos(可选):指定插入位置(索引),默认插入到表的末尾
  • 若表是数组(连续数字索引),插入后会自动调整后续元素的索引

示例

local t = {10, 20, 30}
table.insert(t, 40)  -- 插入到末尾 → {10, 20, 30, 40}
table.insert(t, 2, 15)  -- 插入到索引2的位置 → {10, 15, 20, 30, 40}

2. table.remove(t, [pos])

功能:从表 t 中删除元素

  • pos(可选):指定删除位置,默认删除最后一个元素
  • 删除后会自动调整后续元素的索引(仅对数组有效)

示例

local t = {10, 15, 20, 30, 40}
table.remove(t)  -- 删除最后一个元素 → {10, 15, 20, 30}
table.remove(t, 2)  -- 删除索引2的元素 → {10, 20, 30}

3. table.concat(t, [sep, i, j])

功能:将表 t 中从索引 i 到 j 的元素拼接成字符串

  • sep(可选):元素间的分隔符,默认无
  • ij(可选):起始和结束索引,默认从 1 到表长度

示例

local t = {"Lua", "Python", "Java"}
print(table.concat(t))  -- 输出 "LuaPythonJava"
print(table.concat(t, ", "))  -- 输出 "Lua, Python, Java"
print(table.concat(t, " | ", 2, 3))  -- 输出 "Python | Java"

4. table.sort(t, [comp])

功能:对表 t 进行排序(仅对数组部分有效)

  • comp(可选):比较函数,默认按升序排序
    • 比较函数格式:function(a, b) return a < b end(返回 true 表示 a 应在 b 前)

示例

local t = {3, 1, 4, 2}
table.sort(t)  -- 默认升序 → {1, 2, 3, 4}-- 自定义降序排序
table.sort(t, function(a, b) return a > b end)  -- → {4, 3, 2, 1}-- 对字符串排序
local words = {"banana", "apple", "cherry"}
table.sort(words)  -- 按字母顺序 → {"apple", "banana", "cherry"}

5. table.maxn(t)(Lua 5.1 及更早版本)

功能:返回表 t 中最大的数字索引(仅对数组有效)

  • 在 Lua 5.2+ 中被 #t(长度运算符)替代

示例

local t = {10, 20, 30}
print(table.maxn(t))  -- 输出 3(最大索引是3)local t2 = {[1] = 5, [5] = 10, [3] = 7}
print(table.maxn(t2))  -- 输出 5(最大数字索引是5)

6. 长度运算符 #t(非函数,但常用)

功能:返回表 t 数组部分的长度(连续数字索引的最大索引)

  • 注意:仅对连续的数字索引有效,若存在空洞(如 {1, [3]=3}),结果可能不符合预期

示例

local t = {10, 20, 30}
print(#t)  -- 输出 3local t2 = {1, 2, [5] = 5}
print(#t2)  -- 输出 2(因为索引3、4不存在,视为数组结束)

7. table.unpack(t, [i, j])(Lua 5.1)/ unpack(t, [i, j])(Lua 5.2+)

功能:将表 t 中从索引 i 到 j 的元素作为多个值返回

  • 常用于函数参数展开

示例

local t = {10, 20, 30}
local a, b, c = table.unpack(t)  -- a=10, b=20, c=30-- 作为函数参数
local function sum(x, y, z) return x + y + z end
print(sum(table.unpack(t)))  -- 输出 60(等价于 sum(10,20,30))

 8. 遍历表的常用方式虽然不是 table 模块函数,但遍历表是高频操作:

local t = {name = "Lua", version = 5.1, {1, 2}, {3, 4}, 6, [10]="hello" ,8}-- 1. 遍历数组部分(ipairs:仅遍历连续数字索引,从1开始)
for i, v in ipairs(t) doprint(i, v)  -- 输出索引1和2的元素(子表)
end
print("*********************************")-- 2. 遍历所有键值对(pairs:遍历所有键,包括字符串键和非连续数字键)
for k, v in pairs(t) doprint(k, v)  -- 输出 name、version 及所有数字索引
endprint("*********************************")
-- 3. 遍历所有值(values)
for _, v in ipairs(t) doprint(v)  -- 输出所有元素
endprint("*********************************")
-- 4. 遍历所有键(keys)
for k in pairs(t) doprint(k)  -- 输出所有键if type(k) == "number" thenprint(t[k])  -- 输出所有数字索引的值end
end

输出结果:

1 table: 0x11d00e980

2 table: 0x11d00e9e0

3 6

4 8

*********************************

1 table: 0x11d00e980

2 table: 0x11d00e9e0

3 6

4 8

name Lua

10 hello

version 5.1

*********************************

table: 0x11d00e980

table: 0x11d00e9e0

6

8

*********************************

1

table: 0x11d00e980

2

table: 0x11d00e9e0

3

6

4

8

name

10

hello

version

 

总结

函数 / 运算符核心功能适用场景
table.insert插入元素动态构建数组
table.remove删除元素动态删除数组元素
table.concat拼接数组元素为字符串字符串拼接、日志输出
table.sort排序数组数据排序
#t获取数组长度遍历、边界判断
table.unpack展开数组为多个值函数参数传递
ipairs/pairs遍历表元素数据读取、处理

 这些函数是操作 Lua 表的基础,灵活运用它们可以高效处理数组、字典等各种数据结构。

 

http://www.lryc.cn/news/609347.html

相关文章:

  • 6. 平台总线
  • 模型学习系列之参数
  • 秋招笔记-8.3
  • 关于记录一下“bug”,在做图片上传的时候出现的小问题
  • 验房收房怎么避免被坑?
  • 我的世界进阶模组开发教程——伤害(2)
  • 自己实现一个freertos(2)任务调度 1——最基本的TCB
  • 深入解析HashMap:原理与性能优化
  • Redis实战(7)-- 高级特性 Redis Stream数据结构与基础命令
  • spring batch处理数据模板(Reader-Processor-Writer模式)
  • Timer实现定时调度的原理是什么?
  • PPT 转高精度 PDF API 接口
  • 使用DrissionPage实现xhs笔记自动翻页并爬取笔记视频、图片
  • Coin Combinations I(Dynamic Programming)
  • Docker环境离线安装指南
  • 解剖 .NET 经典:从 Component 到 BackgroundWorker
  • node.js常用函数
  • GaussDB case when的用法
  • SpringBoot AI自动化测试实战案例
  • GitCode疑难问题诊疗
  • Linux命令基础(下)
  • 1.内核模块
  • 14.Redis 哨兵 Sentinel
  • 2. 字符设备驱动
  • IO流-对象流
  • 克罗均线策略思路
  • `npm error code CERT_HAS_EXPIRED‘ 问题
  • Java Stream API 编程实战
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 77-1(题目+回答)
  • 《测试驱动的React开发:从单元验证到集成协同的深度实践》