数组

初始化一个数组,数组没有长度限制,可以根据需要增长。

1
2
3
a = {}
a[1] = 0
print(#a)

数组的起始索引是从1开始。

链表

在 lua 当中实现链表比较方便,每一个节点以一个 table 来表示,下一个节点是 table 当中的一个字段来表示。例如,一个基础的链表会有两个字段:next 和 value。

1
2
3
4
5
6
7
8
list = {next = list,value = "v"}

--遍历
local l = list
while l do
print(l.value)
l = l.next
end

在 lua 当中这种结构很少存在,因为通常存在一个更简单的方式来表示数据,可以通过一个无限大的数组来表示一个栈。

table 的插入和删除

函数 table.insert 用于将一个元素插入到一个数组的指定位置。如果 t 是一个数组 {10,20,30} ,调用 table.insert(t, 1, 15) 后,t 会变成 {10, 15, 20, 30},当 insert 没有指定位置的时候,会默认添加到末尾。

函数 table.remove 会删除并且返回指定位置的元素。如果删除的时候不指定位置则会删除最后一个元素。

table 的排序

可以使用 table.sort 对 table 进行排序,第二个参数是一个函数,函数有两个参数,如果希望第一个参数排在第二个参数前面就返回 true,否则就返回 false。如果没提供这个函数,默认就是降序。

table 的索引是无序的,我们不能对 table 的索引进行排序。

对于 Lua 来说,数组也是无序的,因为它们本质上都是 table。由于用户知道可以通过索引来访问 table 的元素,只要使用有序的索引就可以。这就是为什么遍历数组需要用 ipairs ,但是遍历 table 需要使用 pairs 的原因。

table 的连接

可以把一个字符串数组通过传入的字符串连接后并且返回。它还有可选的参数,用于指定连接符。还有可选的索引。

1
2
3
local s= table.concat({3,2,19},"-",2)
print(s)
--> 2-19

【参考资料】

  1. Lua程序设计

—EOF—