更多详细内容请查看:http://www.111cn.net/sys/linux/59911.htm

table是Lua中唯一的数据结构,其他语言所提供的其他数据结构比如:arrays、records、lists、queues、sets等,Lua都是通过table来实现,下面看一些例子。
一. table
table是lua唯一的数据结构。table 是 lua 中最重要的数据类型。 table 类似于 python 中的字典。table 只能通过构造式来创建。其他语言提供的其他数据结构如array、list等等,lua都是通过table来实现的。table非常实用,可以用在不同的情景下。最常用的方式就是把table当成其他语言的数组。
实例1:

代码如下 复制代码
mytable = {}
for index = 1, 100 do
mytable[index] = math.random(1,1000)
end

说明:
1). 数组不必事先定义大小,可动态增长。
2). 创建包含100个元素的table,每个元素随机赋1-1000之间的值。
3). 可以通过mytable[x]访问任意元素,x表示索引。
4). 索引从1开始。

实例2:

代码如下 复制代码
tab = { a = 10, b = 20, c = 30, d = 'www.111cn.net' }
print(tab["a"]) :

说明:
1). table 中的每项要求是 key = value 的形式。
2). key 只能是字符串, 这里的 a, b, c, d 都是字符串,但是不能加上引号。
3). 通过 key 来访问 table 的值,这时候, a 必须加上引号。

实例3:

代码如下 复制代码
tab = { 10, s = 'www.111cn.net', 11, 12, 13 }
print(tab[1]) = 10
print(tab[2]) = 11
print(tab[3]) = 12
print(tab[4]) = 13

说明:
1). 数标从1开始。
2). 省略key,会自动以1开始编号,并跳过设置过的key。

二. table函数
lua提供了许多实用的内建函数来操作table。
2.1 table.getn(table)
返回table中的元素个数。

代码如下 复制代码
print(table.getn(tab)) -> 4

2.2 table.insert(table,position,value)
在table中插入一个新的值,位置参数可选的,如果没有指定,会添加table的末尾,否则插入到指定的位置。

代码如下 复制代码
table.insert(tab, 2, “hello ttlsa.com”)

插入”hello ttlsa.com”到table的第2个元素的位置,并重新索引。

2.3 table.remove(table,position)
从指定table中删除并返回一个元素,如果没有指定position值,则默认删除最后一个元素。

代码如下 复制代码
print(table.remove(tab,2)) -> hello ttlsa.com

三. table引用
table不仅可以使用数字索引,也可以用其他值作为索引值。

代码如下 复制代码
tab = ()
tab.website = "www.111cn.net"
tab.QQ = "39514058"
tab.a = math.random(1,10)
tab[1] = 11
tab[2] = 22

四. 多维table
在lua中创建多维table非常容易的。可以把多维table看做是table的table。可以通过多个关键字来访问。

代码如下 复制代码
multitab = {}
multitab.name = {}
multitab.author = {}
multitab.name[1] = "QQ qun: 39514058"
multitab.name[2] = "website: http://www.111cn.net"
multitab.author[1] = "默北"
multitab.author[2] = "凉白开"
multitab.author[3] = "tonyty163"

五. 遍历table
pairs()函数可以遍历table中的每个元素。

代码如下 复制代码
tab = { 10, s = 'www.111cn.net', 11, 12, 13 }
for k, v in pairs(tab) do
print(k, ":", v)
end
输出:
1 : 10
2 : 11
3 : 12
4 : 13
s : www.111cn.net

pairs()函数遍历整个table,即使不知道table长度,并返回索引值和相对应的元素值

矩阵和多维数组:

每行一个table,

代码如下 复制代码
mt = {} -- create the matrix
for i=1,N do
mt[i] = {} -- create a new row
for j=1,M do
mt[i][j] = 0
end
end

所有数据在一个table中

代码如下 复制代码
mt = {} -- create the matrix
for i=1,N do
for j=1,M do
mt[i*M + j] = 0
end
end

链表:
list = nil
在list前插入一个元素:
list = {next = list, value = v}

遍历:

代码如下 复制代码
local l = list
while l do
print(l.value)
l = l.next
end
队列:
List = {}
function List.new ()
return {first = 0, last = -1}
end

左侧添加,first减1,左侧删除first加1,
右侧添加,last加1,右侧删除last减1,
first大于last则表示队列空

集合:
这是一个关键字的集合:

代码如下 复制代码
reserved = {
["while"] = true, ["end"] = true,
["function"] = true, ["local"] = true,
}

说明:集合的元素是table的键,而不是值。
原始集合是:{"while", "end", "function", "local", }

更多详细内容请查看:http://www.111cn.net/sys/linux/59911.htm

Lua数据结构的学习笔记的更多相关文章

  1. Lua 5.1 学习笔记

    1 简介 2 语法 2.1 语法约定 2.1.1 保留关键字 2.1.2 操作符 2.1.3 字符串定义 2.2 值与类型 2.2.1 强制转换 2.3 变量 2.3.1 索引 2.3.2 环境表 2 ...

  2. Lua编程入门-学习笔记2

    第6章 深入函数 函数是一种“第一类值(First-Class Value)”,他们具有特定的词法域(lexical scoping) 将表达式“function(x) <body> en ...

  3. Lua编程入门-学习笔记1

    第1章:起点 Chunks: 语句块 每个语句结尾的分号是可选的,如果同一行有多个语句最好使用分号分隔: dofile("lib1.lua")  -- 执行lua文件 全局变量:局 ...

  4. C语言数据结构基础学习笔记——B树

    2-3树:是一种多路查找树,包含2结点和3结点两种结点,其所有叶子结点都在同一层次. 2结点:包含一个关键字和两个孩子(或没有孩子),其左孩子的值小于该结点,右孩子的值大于该结点. 3结点:包含两个关 ...

  5. C语言数据结构基础学习笔记——C语言基础

    抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合, ...

  6. lua类库 middleclass学习笔记

    middleclass使在lua中面象对象变的简单 抄了一遍他的示例代码运行着试了试,基本懂了 local class = require 'middleclass' --类的继承 Person = ...

  7. C语言数据结构基础学习笔记——动态查找表

    动态查找表包括二叉排序树和二叉平衡树. 二叉排序树:也叫二叉搜索树,它或是一颗空树,或是具有以下性质的二叉树: ①若左子树不空,则左子树上所有结点的值均小于它的根结点的值: ②若右子树不空,则右子树上 ...

  8. C语言数据结构基础学习笔记——静态查找表

    查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...

  9. C语言数据结构基础学习笔记——图

    图(G)由顶点集(V)和边集(E)组成,G=(V,E) 常用概念: ①V(G)表示图G中顶点的有限非空集,V永不为空: ②用|V|表示图G中顶点的个数,也称为图G的阶: ③E(G)表示图G中顶点之间关 ...

随机推荐

  1. 深入理解Oracle索引(25):一招鲜、吃遍天之单字段索引创建思路

    本文较短.不过实用性很好.还是记录之.          ㈠ 先别看SQL语句.看执行计划.挑出走全表扫的表 ㈡ 回头看SQL语句.分析上述表的约束字段有哪些.检查各个约束字段的索引是否存在 ㈢ 选择 ...

  2. 关于Javascript的内存泄漏问题的整理稿

    写了好长时间javascript小功能模块,从来没有关注过内存泄漏问题.记得以前写C++程序的时候,内存泄漏是个严重的问题,我想是时候关注一下了.网上找了篇文章,Mark一下.原文地址:http:// ...

  3. Codeforces Round #146 (Div. 1) B. Let's Play Osu! dp

    B. Let's Play Osu! 题目连接: http://www.codeforces.com/contest/235/problem/B Description You're playing ...

  4. Apache的Order Allow Deny心得

    Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权. 所以,最常用的是: O ...

  5. 推荐资料——最受网友力荐的30份HTML前端开发资料

    w3cmark最近会新增一个栏目,专注于搜集前端资源的下载,包括和前端相关的电子书.文档PPT.手册.视频教程等等.而下载的媒介是用微博的微盘,至于为什么选择微盘的,那是因为和微博关联起来,通过微盘上 ...

  6. Swift用UIBezierPath来画圆角矩形、自定义多路径图形

    最好的特点就是可以自定义路径,设置圆角和描边都很方便,以下为代码和效果,均在playground中实现 1.首先实现一个圆角矩形,并对此路径描边,为其绘制一个轮廓. 1 2 3 4 5 6 7 8 9 ...

  7. iOS开发——数据持久化Swift篇&(四)CoreData

    CoreData import CoreData class ViewController: UIViewController { override func viewDidLoad() { supe ...

  8. jQuery代码性能小细节

    选择器Selector的使用 $("#id")使用id来定位DOM元素无疑是最佳提高性能方式,因为jQuery底层将直接调用本地方法document.getElementbyId( ...

  9. Cocos2d html5 笔记 1: overview

    昨天接触到了cocos2d-html5的的东东了, 第一次看其源代码一头雾水,幸好samples目录下面有几个例子,可以从这个入手. MoonWarriors是一个射击类的游戏, 有点像以前玩的雷电, ...

  10. 0c-42-ARC模式下如何兼容非ARC的类

    1.ARC模式下如何兼容非ARC的类 让程序兼容ARC和非ARC部分.转变为非ARC -fno-objc-arc 2.将MRC转换为ARC ARC也需要考虑循环引用问题:一端用strong,一端用we ...