文章目录
- 一、基本知识
- 二、table的构造
- 1.使用步骤
- 2.示例演示
- 三、table的操作
- 1.操作语法
- 2.示例演示
一、基本知识
(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版本后无法使用此函数。