table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。
table(表)的构造
构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
-- 移除引用 ,删除表
mytable = nil
-- lua 垃圾回收会释放内存
mytable = {
[2] = 100 ,
index = 200
}
--[2]索引为2
--index 变量
--这就是tbale的字典表现形式
for k,v in pairs(mytable) do
print("键:"..k)
print("值:"..v)
end
--[[结果:
键:2
值:100
键:index
值:200
]]]
访问表中的元素
用.来访问 table中变量的值
mytable = {
[2] = 100 ,
index = 200
}
print(mytable.index)
--给表中的元素赋值
mytable.index = 300
--此时 mytable中的元素index = 300
for k,v in pairs(mytable) do
print(v)
end
结果:
200
300
当我们为 table a 并设置元素,然后将 a 赋值给 b,则 a 与 b 都指向同一个内存。如果 a 设置为 nil ,则 b 同样能访问 table 的元素。如果没有指定的变量指向a,Lua的垃圾回收机制会清理相对应的内存。
以下实例演示了以上的描述情况:
代码:
-- 简单的 table
mytable = {}
print("mytable 的类型是 ",type(mytable))
mytable[1]= "Lua"
mytable["wow"] = "修改前"
print("mytable 索引为 1 的元素是 ", mytable[1])
print("mytable 索引为 wow 的元素是 ", mytable["wow"])
-- alternatetable和mytable的是指同一个 table
alternatetable = mytable
print("alternatetable 索引为 1 的元素是 ", alternatetable[1])
print("mytable 索引为 wow 的元素是 ", alternatetable["wow"])
alternatetable["wow"] = "修改后"
print("mytable 索引为 wow 的元素是 ", mytable["wow"])
-- 释放变量
alternatetable = nil
print("alternatetable 是 ", alternatetable)
-- mytable 仍然可以访问
print("mytable 索引为 wow 的元素是 ", mytable["wow"])
mytable = nil
print("mytable 是 ", mytable)
结果:
mytable 的类型是 table
mytable 索引为 1 的元素是 Lua
mytable 索引为 wow 的元素是 修改前
alternatetable 索引为 1 的元素是 Lua
mytable 索引为 wow 的元素是 修改前
mytable 索引为 wow 的元素是 修改后
alternatetable 是 nil
mytable 索引为 wow 的元素是 修改后
mytable 是 nil
Table 操作(内部方法)
1,Table 连接
我们可以使用 concat() 输出一个列表中元素连接成的字符串:
代码:
fruits = {"banana","orange","apple"}
-- 返回 table 连接后的字符串
print("连接后的字符串 ",table.concat(fruits))
-- 指定连接字符
print("连接后的字符串 ",table.concat(fruits,"-"))
-- 指定索引来连接 table
print("连接后的字符串 ",table.concat(fruits,"···", 2,3))
结果:
连接后的字符串 bananaorangeapple
连接后的字符串 banana-orange-apple
连接后的字符串 orange···apple
2,table删除 插入 元素
1)insesrt()插入
.指定位置插入
fruits = {"banana","orange","apple"}
table.insert(fruits,1,"you")
print(table.concat(fruits,","))
结果:
you,banana,orange,apple
.默认插入为表的尾部
fruits = {"banana","orange","apple"}
table.insert(fruits,"you")
print(table.concat(fruits,",")) --每个元素的分隔符为,
结果:
banana,orange,apple,you
2)remove()删除
.默认删除尾部元素
fruits = {"banana","orange","apple"}
table.remove(fruits)
print(table.concat(fruits,","))
结果:
banana,orange
.删除指定位置元素
fruits = {"banana","orange","apple"}
table.remove(fruits,2)
print(table.concat(fruits,","))
结果:
banana,apple
Table排序函数 sort
.默认从小到大排序
fruits = {1,2,4,3}
table.sort(fruits)
print(table.concat(fruits,","))
fruits = {"banana","orange","apple"}
table.sort(fruits)
print(table.concat(fruits,","))
结果:
1,2,3,4
apple,banana,orange
.根据模式排序
语法:table.sort(table,function)
按照从大到小排序
代码:
fruits = {2,1,4,3}
--排序规则函数
local function sortMAx(a,b) --a,b为表中元素
return a > b
end
table.sort(fruits,sortMAx)--表,排序规则函数
print(table.concat(fruits,","))
结果:
4,3,2,1
网友评论