lua学习笔记(三)--表

参考《lua程序设计》
可以认为,表是一种动态分配的对象,程序只能操作指向表的引用(或指针)。
除此以外,Lua语言不会进行隐藏的拷贝(hidden copies)或创建新的表

--创建表
a={} --创建空表
k="x"
a[k]=10 --键“x”值10
a[20]="great"   --键20值“great”
print(a["x"])   -->10
k=20
print(a[k]) -->"great"
a['x']=a['x']+1
print(a["x"])   -->11

本质上a跟表是引用关系,当程序中不再有指向它的引用时,垃圾收集器会最终删除这个表并重用其占用的内存。

表索引

  • 当把表当作结构体使用时,可以把索引当作成员名称使用(a.name等价于a[“name”])
  • 常常会混淆a.x和a[x],实际上,a.x代表的是a[“x”],即由字符串"x"索引的表;而a[x]则是指由变量x对应的值 索引的表
  • 要注意,用数字0和字符串"0"对同一个表进行索引,但这两个索引的值及其所对应的元素是不同的
  • 整型和浮点型类型的表索引则不存在上述问题。由于2和2.0的值相等,所以当它们被当作表索引使用时指向的是同一个表元素

表构造器

即表的初始化,支持混用,支持嵌套

  • 类似于数组
days={"Mon","Tue"}    --day[1]="Mon"
  • 记录式(record-like)
a={x=10,y=15}    --a.x=10

PS:以上两个不能使用负数索引

  • 通过方括号括起来的表达式显式地指定每一个索引
op={["+"]="add",["-"]="sub"}    --op["+"]=add

数组、列表和序列

注意lua索引一般是从1开始,索引视为整数
对表而言,#操作符返回表长,但是对于表的空洞,#有争议

遍历表

  • 可以使用pairs迭代器遍历表中的键值对,遍历过程中元素的出现顺序可能是随机的,相同的程序在每次运行时也可能产生不同的顺序
  • 可以使用ipairs迭代器,此时,Lua会确保遍历是按照顺序进行的
  • 使用数值型for循环

表标准库

table

函数作用
insert在指定位置插入一个元素,其他元素后移
remove删除并返回序列指定的元素,其他元素前移,填补空洞
move将表中的索引f到e,移动到t位置(本身是拷贝,原来不会自动nil)

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...