1.什么是table?

table是Lua最复杂最强大的数据结构,Lua本身并不是面向对象语言,但是对面向对象中毒比较深的程序员,可以借助table”完美”地模拟面向对象编程。最简单地,我们可以把table理解为数组,最复杂的,我们可以把table理解为”世间万物”,因为它可以创造出很多你想象不到的东西。一个字,自由度非常大~!

2.如何创建一个table?

local a = {}

或者

local a = {["x"] = 12, ["mutou"] = 99, [3] = "hello"}

table里的元素用逗号分隔,["x"] = 12代表构造一个table元素,下标为”x”,值为12。

table支持几乎是所有类型的下标,包括函数。

3.有更简洁的方式

上面下标看起来太复杂了,有没有简单点的?看看下面的代码:

local a = {x = 12, mutou = 99, [3] = "hello"}
print(a["x"]);

运行结果仍然是输出12,也就是说,表创建或初始化时,对于字符串下标,我们可以省略方框和双引号,但是数字下标不可以,千万不要搞混了。

但是,a["x"]这种调用方式也很烦人不是吗?程序员都很懒的,所以Lua支持一下这种方式的调用:

print(a.x);

输出结果仍然是12,也就是说,对于字符串下标,可以直接用a.x的形式调用,也是省略了方框和双引号,调用方式和初始化一样,这样就不会搞混了,记住,是字符串下标才这么做。

4.想要默认数字索引怎么办?

如果说,大家习惯了数组,用数字下标,又不想自己一个个数字地定义,比如:

local a = {[1] = 12, [2] = 43, [3] = 45, [4] = 90}

没关系,Lua又为爱偷懒的程序员提供了一招,如下:

local a = {12, 43, 45, 90}
print(a[1]);

输出12。

table默认的第一个索引下标是1,并且很多相关的函数也假设table的第一个索引下标为1,所以大家最好遵守这个规则。

5.更强大的应用之table的table

table什么都能放,当然也能放table了,如下:

local a = {
 {x = 1, y = 2},
 {x = 3, y = 10}
}

我们定义了一个table,命名为a,table有两个元素,分别是两个没有名字的table,没有显示指定下标,那Lua就会默认给table的元素赋予下标(从1开始)

因此,a的第一个元素就是{x = 1, y = 2},调用a的第一个元素的方式为:a[1]

由于a[1]又是一个table,所以,再次调用table的x下标的值:a[1].x
这样就OK了。

6.更强大的应用之函数下标

我们最后来试试更好玩的,用一个函数当table的下标:

function test()
 print("Hello Table");
end
local a = {[test] = 1}
print(a[test]);

定义了一个函数test,然后用test作为下标定义了table的一个元素,值为1。

7.pairs()和ipairs()常用来遍历表,有什么区别呢?

pairs能够遍历表中全部的元素,但顺序是乱序的。

ipairs会依次遍历索引为1的值,索引为2的值,索引为3的值。。。直到值为nil,退出遍历

举例:

local a = {[1] = "a1", [2] = "a2", [4] = "a3", [5] = "a4", [6] = "a5"}

for key, value in ipairs(a) do

  ngx.say("key=", key, ", value=", value)

end

结果是

key=1, value=a1

key=2, value=a2

因为在table a中,索引为3对应的的值为nil,故就退出遍历了,只能遍历到索引为1、2的值。

8.#table的值?

无意义。想获取表元素个数的话,只能自己写函数。

lua table、ipairs/pairs基础知识的更多相关文章

  1. Lua for - ipairs,pairs,# 遍历的运行时间

  2. Lua 学习之基础篇四<Lua table(表)>

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...

  3. Step By Step(Lua基础知识)

    Step By Step(Lua基础知识) 一.基础知识:    1. 第一个程序和函数:    在目前这个学习阶段,运行Lua程序最好的方式就是通过Lua自带的解释器程序,如:    /> l ...

  4. lua面试基础知识

    1.lua中八种基础类型:nil(空),boolean(布尔),number(数字),string(字符串),userdata(自定义类型),function(函数),thread(线程),table ...

  5. Lua Table pairs输出顺序问题 (版本差异 解决数字索引间断并兼容字符串索引)

    问题标签: Lua Table 迭代器;Lua Table 输出顺序; Lua Table 顺序输出;Lua Table 数字索引 字符串索引;Lua Table pairs; 问题背景: 使用pai ...

  6. lua table integer index 特性

    table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...

  7. Lua table使用

    days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...

  8. 3-学习GPRS_Air202(需要知道的关于Lua的一些基本的知识)

      http://www.cnblogs.com/yangfengwu/p/8948935.html 学东西一定是打破沙锅学到底,有问题就解决问题,不要试图去回避或者放弃解决当前的问题,如果总是回避或 ...

  9. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

随机推荐

  1. jQuary总结8:动画操作-自定义动画

    1 自定义动画 语法: jQuery对象.animate(json,[speed],[easing],[callback]) 参数详解: -1 json:要执行动画的CSS属性,带数字(必选) -2  ...

  2. C# SendKeys用法

    功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWait(string keys); 说明 ...

  3. Debug 时,执行语句

    Display View The Display View displays the result of evaluating an expression in the context of the ...

  4. HTTP 常见异常状态及Delphi IDHTTP 控件处理方式

    以下部分为网上查找,部分为工作中整理 200:请求成功 202:请求被接受,但处理尚未完成 302:请求到的资源在一个不同的URL处临时保存     处理方式:重定向到临时的URL(IDHTTP处理方 ...

  5. 使用Amazon Simple Queue Service(SQS) 实现简单的消息服务

    一  引言 亚马逊Amazon作为云计算的领跑者推出了很多云服务,最近因为项目的原因,需要用到SQS服务,因此简要地写下这篇随笔,一来方便以后查阅,二来方便共享一些简单的操作. SQS即可以理解为一个 ...

  6. solr的schema.xml配置属性解释

    schema.xml做什么? SOLR加载数据,创建索引和数据时,核心数据结构的配置文件是schema.xml,该配置文件主要用于配置数据源,字段类型定义,搜索类型定义等.schema.xml的配置直 ...

  7. Consul ACL

    consul自带ACL控制功能,看了很多遍官方文档,没有配置步骤https://www.consul.io/docs/internals/acl.html 主要对各种配置参数解释,没有明确的步骤,当时 ...

  8. centos 7 安装mysql5.6rpm格式

    1查看是否安装了mysql   rpm -qa|grep -i mysql 如果安装了请卸载:rpm -e --nodeps MySQL... 2.没有安装则进行如下操作 下载mysql rpm ta ...

  9. 聊聊 JDK 阻塞队列源码(ReentrantLock实现)

    项目中用到了一个叫做 Disruptor 的队列,今天楼主并不是要介绍 Disruptor 而是想巩固一下基础扒一下 JDK 中的阻塞队列,听到队列相信大家对其并不陌生,在我们现实生活中队列随处可见, ...

  10. pageadmin网站制作 如何修改和管理网站模板

    在使用pageadmin CMS 的同时,遇到问题可以参考官网帮助中心.1.网站模板目录地址/templates目录, 2.点击展开后,每个目录就是一个网站模板, 前端设计师制作的新版本都可以放到这个 ...