数组
1.使用整数来索引table即可在Lua中实现数组。因此数组没有一个固定大小。
2.然而在Lua中,习惯以1作为数组的其实索引,因为Lua库和长度操作符都遵循这个约定。
矩阵与多维数组
1.Lua中有两种方法表示矩阵,第一种是使用一个数组的数组,也就是嵌套table;第二种就是将两个索引合并为一个索引,即第一个索引乘以一个适当的常量(变为一维数组)。
2.特殊矩阵,例如稀疏矩阵,这种矩阵中的大多数元素为0或者nil,此时无法使用长度操作符。一般使用pairs且值遍历那些非nil的元素。使用pairs的迭代并不保证会按递增的次序来访问元素。如果需要保证次序,那么就需要链表了。
链表
1.table实现链表是很方便的。每个节点以一个table来表示,一个“链接”只是一个节点table中的一个字段,该字段包含了对其他table的引用。实现一个基础的列表,其中的每个加点具有next和value两个字段,步骤如下:
队列与双向队列
1.实现队列的一种简单方法是使用table库中insert和remove函数,用于在一个数组的任意位置插入或删除元素,并根据操作要求移动后续元素(移动的开销大)。一种更高效的实现是使用两个索引,分别用于首尾的两个元素。
集合与无序组(bag)
1.表示集合,就是集合元素作为索引放入一个table中。那么对于任意值都无须搜索table,只需用该值来索引table并查看结果是否为nil。
2.包,有时也称为多重集合(Multiset),是每个元素可以出现多次的集合。包的表示类似于集合,只不过包需要将一个计数器与table的key关联。
字符串缓冲
图
P102