lua table (表)


table是lua的一种数据结构,用来帮助我们创建不同的数据类型,如 : 数组、字典。

lua table 使用关联型数组,你可以使用任意类型的值来作数组的索引,但这个值不能为Nil.

lua table 是不固定大小的,你可以根据自己的需要进行扩容。

lua 也是通过table来解决模块(module) 、包(package)和对象(Objec)的。例如 string.format表示使用"format"来索引table string。

 

table(表)的构造


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

-- 初始化表 
tbl1 = {}

--指定值
tbl1[1] = "lua"

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

当我们为table a 初始化并设置元素,然后将a赋值给b,则a,b都指向同一个内存。如果a设置为nil,则b同样可以访问table元素。如果没有指定的变量指向a,lua的垃圾回收机制会清理对应的内存。

 

table 操作


序号

方法和用途

1

table.concat(table[,sep[,start[,end]]]);

concat是concatenate(连锁、连接)的缩写。table.concat()函数列出参数中指定table的数组部分从start位子到end位置的所有元素,元素间以指定的的分隔符(sep)隔开。

2

table.insert(table,[pos,]value)

在table的数组部分指定位置(pos)插入值为value的一个元素,pos参数可选,默认为数组部分末尾。

3

table.maxn(table)

指定table中所有正数key值中最大的key值,如果不存在key值为正数的元素,则返回0 .(lua5.2版本后已不存在此函数)

4

table.remove(table[,pos])

返回table数组部分位于pos位置的元素,其后的元素会被前移,pos参数可选,默认为table长度,即从最后一个元素删起。

5

table.sort(table[,comp])

对给定的table进行升序排序

table 连接:


我们可以使用concat()方法来连接两个table:

fruits = {"banana","orange","apple"}

--返回table连接后的字符串
print("连接后的字符串",table.concat(fruits))

--指定连接字符
print("连接后的字符串",table.concat(fruits,","))

--指定索引来来连接 
print("连接后的字符串",table.concat(fruits,",",2,3))
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua table_concat.lua 
连接后的字符串	bananaorangeapple
连接后的字符串	banana,orange,apple
连接后的字符串	orange,apple

插入和移除


--在尾部插入
table.insert(fruits,"mango")
print("索引 4 的元素为 ",fruits[4])

--在索引为2的键处插入
table.insert(fruits,2,"grapes")
print("索引 2 的元素为 ",fruits[2])

print("最后一个元素为 ",fruits[5])

table.remove(fruits)
print("移除后最后一个元素为 ",fruits[5])
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua table_insert_del.lua 
索引 4 的元素为 	mango
索引 2 的元素为 	grapes
最后一个元素为 	mango
移除后最后一个元素为 	nil

 

table排序


fruits={"banana","orange","apple","grapes"}

print("before sort")

for k,v in ipairs(fruits) do 
	print(k,v)
end

table.sort(fruits)

print("after sort")

for k,v in ipairs(fruits) do 
	print(k,v)
end
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua table_sort.lua 
before sort
1	banana
2	orange
3	apple
4	grapes
after sort
1	apple
2	banana
3	grapes
4	orange