Lua——table(表)的使用


一、基本知识

(1)table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
(2)Lua table 使用关联型数组,可以用任意类型的值来作数组的索引,但这个值不能是 nil
(3)Lua table 是不固定大小的,你可以根据自己需要进行扩容。
(4)Lua也是通过table来解决模块、包和对象的。 例如string.format表示使用"format"来索引table string。
说白了,table的存储方式和使用方式就类似是key-value对。

二、table的构造

1.使用步骤

构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存

2.示例演示

当我们为 table1 设置元素,然后将 table1赋值给 table2,则 table1 与table2都指向同一个内存。如果table1设置为 nil ,则 table2同样能访问 table1的元素。如果没有指定的变量指定这个内存,Lua的垃圾回收机制会清理相对应的内存。

--初始化table1
table1 = {}
print("table1的类型是:",type(table1))

table1["age"] = 22
table1["name"] = "xiaomeng"
print("table1中的age数据类型为:",type(table1["age"]),
	  "table1中的name数据类型为:",type(table1["name"]))
print("table1中的age为:",table1["age"],
      "table1中的name为:",table1["name"])

--table2和table1共享数据
table2 = table1
table2["age"] = 19
table2["name"] = "xiaohua"
print("table1中的age数据类型为:",type(table1["age"]),
	  "table1中的name数据类型为:",type(table1["name"]))
print("table1中的age被改为:",table1["age"],
      "table1中的name被改为:",table1["name"])

--由于tbale1和table2共享数据,所以table2的操作table1受影响
table2[1]=3
print(table1[1])

table1 = nil--释放table1变量,但是table2仍然可以访问
print("table2中的age和name数据分别为:",table2["age"],table2["name"])

table1 = nil--释放table2变量
--Lua垃圾回收会释放内存

运行结果:
在这里插入图片描述

三、table的操作

1.操作语法

在这里插入图片描述

2.示例演示

(1)连接演示
注意sep是分隔符,start和end不写的话,就默认从头连接到尾。

table1={1,"wer","asdf",3}

print(table.concat(table1))         --默认将所有内容都连接起来
print(table.concat(table1, "@1"))   --默认将所有内容都连接起来,且用两段之间用'@1'分割
print(table.concat(table1,"@2",2))  --将table1的内容从第二个到末尾连接起来,'@2'分割
print(table.concat(table1,"@3",2,3))--将table1的内容从第2个连接到第3个,用'@3'分割

运行结果:
在这里插入图片描述
(2)插入和删除演示
pos可选,不写的话,默认在尾部插入

--注意数据结构table下标从1开始
table1={1,2,3,"a","b"}

table.insert(table1,"c")
print("table1[6]的值为:",table1[6])

table.insert(table1,4,"d")
print("table1[4]的值为:",table1[4])

print("现在table1的内容为:",table.concat(table1,","))

c=table.remove(table1)--默认返回最后一个元素,并且将其移除
print("被移除的元素为:",c)
print("现在table1的内容为:",table.concat(table1,","))

c=table.remove(table1,1)--返回第一个元素,并且将其移除
print("被移除的元素为:",c)
print("现在table1的内容为:",table.concat(table1,","))

运行结果:
在这里插入图片描述
(3)排序演示

table1={"aqwer","basdf","cadef","awertt"}
print("现在table1中的内容为:",table.concat(table1,","))

table.sort(table1)
print("排序后table1中的内容为:",table.concat(table1,","))

table1=nil

运行结果:
在这里插入图片描述

able1={1,3,5,7,2,1}
print("现在table1中的内容为:",table.concat(table1,","))
table.sort(table1)
print("排序后table1中的内容为:",table.concat(table1,","))

table1=nil

运行结果:
在这里插入图片描述
当内容中既有number类型又有string类型的元素时,无法进行排序。

对于table.maxn函数,Lua5.0版本后无法使用此函数。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孟小胖_H

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

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

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

打赏作者

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

抵扣说明:

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

余额充值