Lua table(表)

table是一个关联数组,数组的索引可以是数字或者是字符串,所有索引值都需要用 "[" 和 "]" 括起来;如果是字符串,还可以去掉引号和中括号;即如果没有 [] 括起,则认为是字符串索引。

1. table 的特性

table 的默认初始索引一般以 1 开始,如果不写索引,则索引就会被认为是数字,并按顺序自动从 1 往后编。

table 的变量只是一个地址引用,对 table 的操作不会产生数据影响。

table 不会固定长度大小,有新数据插入时长度会自动增长。

table 里保存数据可以是任何类型,包括 function 和 table。

table 所有元素之间,总是用逗号 "," 隔开。

2. table 的构造

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

-- 初始化表
mytable = {}

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

--字符串key值的属性
mytable["value"] = 6    

--字符串key值的简写
mytable.value = 16  

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

3. table 的常用方法

以下列出了 Table 操作常用的方法:

序号方法 & 用途
1table.concat (table [, sep [, start [, end]]]):

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

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

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

3table.remove (table [, pos])

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

4table.sort (table [, comp])

对给定的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 插入函数

以下范例演示了 table 的插入操作:

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

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

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

执行以上代码输出结果为:

索引为 4 的元素为     mango
索引为 2 的元素为     grapes

3)table 移除函数

以下范例演示了 table 的移除操作:

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

print("最后一个元素为 ",fruits[3])
table.remove(fruits)
print("移除后最后一个元素为 ",fruits[3])

执行以上代码输出结果为:

最后一个元素为 apple
移除后最后一个元素为    nil

4)table 排序函数

以下范例演示了 sort() 方法的使用,用于对 Table 进行排序:

fruits = {"banana","orange","apple","grapes"}
print("排序前")
for k,v in ipairs(fruits) do
        print(k,v)
end

table.sort(fruits)
print("排序后")
for k,v in ipairs(fruits) do
        print(k,v)
end

执行以上代码输出结果为:

排序前
1    banana
2    orange
3    apple
4    grapes
排序后
1    apple
2    banana
3    grapes
4    orange

下一章:Lua 条件语句

Lua 条件语句是在程序执行过程中判断设定的条件是否成立,根据判断结果执行不同的操作。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。条件语句的条件表达式结果可以是任何值,Lua 认为 false 和 nil 为假,true 和 非nil 为真。