Lua中的table可以表示其他语言提供的数据结构:数组、记录、线性表、队列、集合等。

在Lua中很少编写搜索算法,因为table本身就提供了直接访问任意类型的功能。

数组

  使用整数来索引table即可在lua中实现数组,数组没有固定大小,可以根据需要增长。

通常,在初始化一个数组时,也就间接地定义了它的大小:

a = {}  --新建一个数组
for i = , do
a[i] =
end

长度操作符(#)依赖于这个事实来计算数组的大小:

print(#a)    --> 1000

可以使用0,1或其他任意值来作为数组的起始索引:

--使用索引值 -5 ~ 5来创建一个数组
a = {}
for i=-, do
a[i] =
end

在Lua中的习惯一般是以1作为数组的起始索引。Lua库和长度操作符都遵循这个约定。

如果你的数组不是从1开始,那就无法使用这些功能。

通过table构造式,可以在一句表达式中创建并初始化数组:

squares = {,,,,,,,}

这种构造式可以根据要求变得更长。

矩阵与多维数组

  在Lua中,有两种方式表示矩阵。

第一种是使用一个“数组的数组”,也就是说一个table中的每个元素是另一个table。

创建一个NxM的零矩阵:

mt = {}                --创建矩阵
for i = ,N do
mt[i] = {} --创建一个新行
for j=,M do
mt[i][j] =
end
end

由于在Lua中table是一种对象,因此在创建矩阵时,必须显式地创建每一行。

第二种是将两个索引合并为一个索引。如果两个索引是整数,可以将第一个索引乘以一个适当的常量,并加上第二个索引。

mt = {}
for i = ,N do
for j = ,M do
mt[(i-)* M + j] =
end
end

如果索引是字符串,那么可以把索引拼接起来,中间使用一个字符来分隔。例如,使用字符串s和t来索引一个矩阵,可以通过代码m[s..":"..t],其中,s和t都不

能包含冒号,否则像("a:",":b")这样的索引会使最终索引变成“a::b”。如果无法保证这点,可以使用例如“\0”这样的控制字符来分隔两个索引。

关于“稀疏矩阵”这里就不讨论了。

chapter11_1 Lua数组、列表的更多相关文章

  1. ArrayList数组列表

    ArrayList数组列表 Collection接口和List接口的区别 List接口扩充了Collection接口,添加了索引相关的方法. code example Object get(int i ...

  2. 泛型数组列表 ArrayList

    为什么使用泛型数组列表而不使用普通数组? 1.普通数组经常会发生容量太大以致浪费的情况 2.普通数组无法动态更改数组 基本概念: 1.采用[类型参数]的[类]---->[泛型类] 2.[泛型类型 ...

  3. 变长数组列表ArrayList

    简介:此数据结构定义为一个ArrayList结构体类型,维护了一个内部堆数组.通过realloc函数实现了数组容量自动扩充,每次扩充到原来的2倍. 通过函数指针实现了使用者根据自己的需求按条件按查找目 ...

  4. js数组(列表)的基本操作

    本文主要介绍JS对数组(列表)的基本操作.习惯了用数据库的操作顺序来说明:增.删.改.查:合并,裁剪,排序,格式化. 一.数组元素的添加(增加) 增加数组元素有三种方法:unshift()  push ...

  5. lua 数组

    lua 数组 语法结构 arr = { - } 一维数组 数组的值仍然是数组的, 为多维数组, 否则为一维数组 示例程序 local arr = {1, 2, 3} for i = 1, #arr d ...

  6. c#简单实现二维数组和二维数组列表List<>的转置

    刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...

  7. Java数组列表反转

    在Java中,如何反转数组列表中的元素? 以下示例使用Collections.reverse(ArrayList)方法反转数组列表中的元素. package com.yiibai; public cl ...

  8. java 泛型数组列表

    如下代码: package com.company; import java.lang.reflect.Array; import java.util.ArrayList; public class ...

  9. 前端 javascript 数据类型 数组 列表

    javascript数组相当于python的列表 创建列表 a = [1,2,3,4]; [1, 2, 3, 4] 获取列表长度 a = [1,2,3,4]; [1, 2, 3, 4] a.lengt ...

随机推荐

  1. java四种xml解析区别

    1.DOM解析 dom解析是根据树形结构解析,将整个文档加载到内存中,因此对内存的要求较高,所以可以对该文档数据进行多次操作(增,删,改,查). 2.SAX解析 SAX解析是根据事件模型解析,边读取文 ...

  2. 浅谈javascript中stopImmediatePropagation函数和stopPropagation函数的区别

    在事件处理程序中,每个事件处理程序中间都会有一个event对象,而这个event对象有两个方法,一个是stopPropagation方法,一个是stopImmediatePropagation方法,两 ...

  3. Html5移动端页面自适应百分比布局

    按百分比布局,精度肯定不会有rem精确 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  4. 图片添加border 不占用图片的大小

    因为设计稿中的分割线大多分为两种情况:1.在图片右侧:2.在图片右侧+下方. 那么使用伪类before和after以及绝对定位很容易在不改变原布局的情况使图片按照设计稿输出和保留分割线. 例div.i ...

  5. XTU 1249 Rolling Variance

    $2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$G$题 前缀和. 把公式化开来,会发现只要求一段区间的和以及一段区间的平方和就可以了. #pragma comment(linker, &quo ...

  6. GrowingIO 2016 数据驱动增长大会—— 一起做增长英雄

    GrowingIO 2016 数据驱动增长大会,首次聚齐了增长黑客之父 Sean Ellis .世界前十位前沿数据科学家张溪梦等数十位中美顶尖增长实践者: 链家.点融网.Camera360.量化派.北 ...

  7. 大数据揭示的10个常见JAVA编程错误

    初学者最常犯的编程错误是什么呢?有可能他们总是混淆等值(==)与赋值(=),或者 & 和 &&:也有可能是他们在循环中使用错误的分隔符(for (int i = 0, i &l ...

  8. 关于CGI、FastCGI和PHP-FPM的关系

    1.CGI是干嘛的? CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...

  9. java实现的快速排序算法

    快速排序的原理:选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的).一般选择序列的第一个元素. 一次循环:从后往前比较,用基准值和最后一个值比较, ...

  10. Python笔记4-20151029

    一.切片 L = [''Michael','Sarah','Tracy','Bob','Jack'] 取前N个元素,也就是索引为0-(N-1)的元素,可以用循环: >>> r = [ ...