Lua学习笔记(六)—— 数组与集合

一、 数组

a) 新建一个数组

 Lua学习笔记(六)—— 数组与集合_第1张图片

b) 用长度操作符(#)来获取数组的长度

 

c) 可以使用01其他任意值来作为数组的起始索引

 Lua学习笔记(六)—— 数组与集合_第2张图片

二、 矩阵与多维数组

a) 有两种方式来表示数组

i. 第一种,使用数组的数组

 Lua学习笔记(六)—— 数组与集合_第3张图片

ii. 第二种,将两个索引合并为一个索引

1. 如果索引是整数

 Lua学习笔记(六)—— 数组与集合_第4张图片

2. 如果索引是字符串,可以把索引拼接起来,中间使用一个字符来分割

 

 

b) 稀疏矩阵

i. 定义

通常应用程序会用到一种特殊的举证,称为稀疏矩阵,这种矩阵中的大多数元素为0nil,稀疏矩阵是很浪费空间的,而在lua中,数组时以table来表示的,它们本身就是稀疏的,所以只需要为非nil的元素付出空间,所以lua中稀疏矩阵式不会浪费空间的

ii. 遍历

因为在稀疏矩阵的长度太大,所以直接对稀疏矩阵使用长度操作符是非常低效的,所以一般使用pairs且只遍历那些非nil的元素

 Lua学习笔记(六)—— 数组与集合_第5张图片

iii. 注意

Table中的key是无序的,所以使用pairs的迭代并不保证会按递增的次序来访问元素

三、 链表

a) 创建链表

i. 要实现一个基础的链表,其中每个节点具有两个字段:nextvalue

ii. 先创建一个用作列表头结点的变量:list = nil,在表头插入一个元素,元素值为v: list = {next = listvalue = v}

iii. 遍历此列表

local l = list

while l do

l = l.next

end

 

四、 队列与双向队列

a) 实现队列的一种简单方法是使用table库的函数insert 和 remove。这两个函数可以在一个数组的任意位置插入或删除元素,并且根据操作要求移动后续元素,不过对于较大的结构,移动的开销是很大的。

b) 一种更高效的实现是使用两个索引,分别用于首尾的两个元素

 Lua学习笔记(六)—— 数组与集合_第6张图片


五、 集合与无序组

a) 包的概念

包,有时也称为多重集合,与普通的集合的不同之处在于其每个元素可以出现多次

六、 字符串缓冲

a) 在lua,我们可以将一个table作为字符串的缓冲。其关键是使用函数table.concat,它会将给定列表中的所有字符串连接起来,并返回连接的结果

 Lua学习笔记(六)—— 数组与集合_第7张图片

b) Concat函数还有第二个可选的参数,可以指定一个插在字符串间的分隔符。有了这个分隔符的参数,就不必每行后插入一个\n”了

 Lua学习笔记(六)—— 数组与集合_第8张图片

c) Concatio.read(“*all”)实现原理

 Lua学习笔记(六)—— 数组与集合_第9张图片

 

七、 图

a) 图的实现

 Lua学习笔记(六)—— 数组与集合_第10张图片Lua学习笔记(六)—— 数组与集合_第11张图片

b) 使用图

Lua学习笔记(六)—— 数组与集合_第12张图片Lua学习笔记(六)—— 数组与集合_第13张图片

你可能感兴趣的:(Lua)