chapter11_1 Lua数组、列表
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数组、列表的更多相关文章
- ArrayList数组列表
ArrayList数组列表 Collection接口和List接口的区别 List接口扩充了Collection接口,添加了索引相关的方法. code example Object get(int i ...
- 泛型数组列表 ArrayList
为什么使用泛型数组列表而不使用普通数组? 1.普通数组经常会发生容量太大以致浪费的情况 2.普通数组无法动态更改数组 基本概念: 1.采用[类型参数]的[类]---->[泛型类] 2.[泛型类型 ...
- 变长数组列表ArrayList
简介:此数据结构定义为一个ArrayList结构体类型,维护了一个内部堆数组.通过realloc函数实现了数组容量自动扩充,每次扩充到原来的2倍. 通过函数指针实现了使用者根据自己的需求按条件按查找目 ...
- js数组(列表)的基本操作
本文主要介绍JS对数组(列表)的基本操作.习惯了用数据库的操作顺序来说明:增.删.改.查:合并,裁剪,排序,格式化. 一.数组元素的添加(增加) 增加数组元素有三种方法:unshift() push ...
- lua 数组
lua 数组 语法结构 arr = { - } 一维数组 数组的值仍然是数组的, 为多维数组, 否则为一维数组 示例程序 local arr = {1, 2, 3} for i = 1, #arr d ...
- c#简单实现二维数组和二维数组列表List<>的转置
刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...
- Java数组列表反转
在Java中,如何反转数组列表中的元素? 以下示例使用Collections.reverse(ArrayList)方法反转数组列表中的元素. package com.yiibai; public cl ...
- java 泛型数组列表
如下代码: package com.company; import java.lang.reflect.Array; import java.util.ArrayList; public class ...
- 前端 javascript 数据类型 数组 列表
javascript数组相当于python的列表 创建列表 a = [1,2,3,4]; [1, 2, 3, 4] 获取列表长度 a = [1,2,3,4]; [1, 2, 3, 4] a.lengt ...
随机推荐
- ubuntu下update-alternatives命令的使用
在ubuntu系统中,update-alternatives是专门维护系统命令链接符的工具,其可以对某个工具的多个软件版本进行管理,通过它可以很方便的设置系统默认使用哪个命令的哪个软件版本. 在命令行 ...
- 利用PyCharm进行Python远程调试
背景描述 有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是就在想,要是可以在服务器环境中进行单步跟踪调试就好了. ...
- 【Python】使用super初始化超类
初始化超类的传统方式,在子类的实例中调用超类的__init__()方法. 但是传统的方法有两个问题,比如: 问题1: class MyBaseClass: def __init__(self, val ...
- MVC网站后台分离
1.新建一个项目TestAdmin项目类型随便选一个,待会删掉,因为这里我只需要解决方案名称 [项目存放于F盘 F:\TestAdmin] 2.新建一个 ZGJ.Web 的前台MVC项目,将开 ...
- TreeSet与TreeMap的源码分析 JDK7
TreeSet存储原则是:不可重复,有序的. public TreeSet() { this(new TreeMap<E,Object>()); } public TreeSet(Comp ...
- Dynamics CRM 相关资料
links: 1.The Microsoft Dynamics CRM Team Blog 2.申请试用Dynamics CRM 2013 http://www.microsoft.com/zh-cn ...
- suricata抓包方式之一AF_PACKET
suricata抓包方式之一AF_PACKET 噜拯渡 睦坚削 曜纡宄 式犒藿氆 咬焚桤φ 要蒯钮 喃俚夼 币噎嶂颐 话千叶舞就后悔了怎么想都容易让人引 虻谮м 及葚雏钏 看着表面平静实际 ...
- 各个Maven仓库镜像(包括国内)
各个Maven仓库镜像(包括国内) 衽孤魍墓 ゅ槭 众矿工唯唯诺诺我在旁哭笑不得原 宦蠃サ 骘猩池 粑涫汾滹 吧滔哌蹋 飑俗た 狃攵庾唾 想必是想挡住什么我想反正这笔筒也不是 翡蜮胼 娴左 ...
- c# 配置文件App.config操作类库
public class ConfigOperator { #region 从配置文件获取Value /// <summary> /// 从配置文件获取Value /// </sum ...
- TheFifthWeekText
类的构造方法是当创建对象时,对象自动调用的对对象进行初始化的方法.他没有返回值,而且构造方法名与类名是相同的.如果类中没有定义构造方法,Java编译器在编译时会自动给它提供一个没有参数的默认构造方法, ...