当前位置: 首页 > 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.dtcms.com/a/312771.html

相关文章:

  • Django 序列化详解:从 Model 到 JSON,全面掌握数据转换机制
  • 使用AndroidStudio调试Framework源码
  • 腾讯人脸识别
  • 数据治理:DQC(Data Quality Center,数据质量中心)概述
  • [嵌入式embed]C51单片机STC-ISP提示:正在检测目标单片机
  • 《前端无障碍设计的深层逻辑与实践路径》
  • MyBatis动态SQL精要:从<if>到<foreach>的灵活拼接之道
  • 高质量数据集|建设三大难点
  • [硬件电路-140]:模拟电路 - 信号处理电路 - 锁定放大器概述、工作原理、常见芯片、管脚定义
  • [硬件电路-133]:模拟电路 - 信号处理电路 - 电荷放大器概述、工作原理、常见芯片、管脚定义
  • 深度学习(鱼书)day10--与学习相关的技巧(后两节)
  • 仿TCmalloc内存分配器
  • 后端研发转型爬虫实战:Scrapy 二开爬虫框架的避坑指南
  • C++入门自学Day5-- C/C++内存管理(续)
  • jvm之jconsole的使用
  • Maven 常用命令详解
  • react native中markdown添加数学公式的支持
  • 文明存续的时间博弈:论地球资源枯竭临界期的技术突围与行动紧迫性
  • STM32-驱动OLED显示屏使用SPI(软件模拟时序)实现
  • 【stm32】按键控制LED以及光敏传感器控制蜂鸣器
  • PYTHON从入门到实践-18Django模版渲染
  • 我的世界进阶模组开发教程——伤害(2)
  • 20250803让飞凌OK3576-C开发板在Rockchip的原厂Android14下适配声卡NAU88C22YG【Android部分】
  • C++:STL中的栈和队列的适配器deque
  • 多模态大模型的原理
  • 机器人产业需要技术与资本双驱动,在泡沫期中探索商业化路径
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • LDAP身份验证前世今生
  • Corrosion2靶机练习笔记
  • 大语言模型的解码策略:贪婪解码与波束搜索