lua table、ipairs/pairs基础知识
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.有更简洁的方式
上面下标看起来太复杂了,有没有简单点的?看看下面的代码:
print(a["x"]);
运行结果仍然是输出12,也就是说,表创建或初始化时,对于字符串下标,我们可以省略方框和双引号,但是数字下标不可以,千万不要搞混了。
但是,a["x"]这种调用方式也很烦人不是吗?程序员都很懒的,所以Lua支持一下这种方式的调用:
输出结果仍然是12,也就是说,对于字符串下标,可以直接用a.x的形式调用,也是省略了方框和双引号,调用方式和初始化一样,这样就不会搞混了,记住,是字符串下标才这么做。
4.想要默认数字索引怎么办?
如果说,大家习惯了数组,用数字下标,又不想自己一个个数字地定义,比如:
没关系,Lua又为爱偷懒的程序员提供了一招,如下:
输出12。
table默认的第一个索引下标是1,并且很多相关的函数也假设table的第一个索引下标为1,所以大家最好遵守这个规则。
5.更强大的应用之table的table
table什么都能放,当然也能放table了,如下:
{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的下标:
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基础知识的更多相关文章
- Lua for - ipairs,pairs,# 遍历的运行时间
- Lua 学习之基础篇四<Lua table(表)>
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- Step By Step(Lua基础知识)
Step By Step(Lua基础知识) 一.基础知识: 1. 第一个程序和函数: 在目前这个学习阶段,运行Lua程序最好的方式就是通过Lua自带的解释器程序,如: /> l ...
- lua面试基础知识
1.lua中八种基础类型:nil(空),boolean(布尔),number(数字),string(字符串),userdata(自定义类型),function(函数),thread(线程),table ...
- Lua Table pairs输出顺序问题 (版本差异 解决数字索引间断并兼容字符串索引)
问题标签: Lua Table 迭代器;Lua Table 输出顺序; Lua Table 顺序输出;Lua Table 数字索引 字符串索引;Lua Table pairs; 问题背景: 使用pai ...
- lua table integer index 特性
table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...
- Lua table使用
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...
- 3-学习GPRS_Air202(需要知道的关于Lua的一些基本的知识)
http://www.cnblogs.com/yangfengwu/p/8948935.html 学东西一定是打破沙锅学到底,有问题就解决问题,不要试图去回避或者放弃解决当前的问题,如果总是回避或 ...
- 大数据基础知识问答----spark篇,大数据生态圈
Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...
随机推荐
- jQuary总结8:动画操作-自定义动画
1 自定义动画 语法: jQuery对象.animate(json,[speed],[easing],[callback]) 参数详解: -1 json:要执行动画的CSS属性,带数字(必选) -2 ...
- C# SendKeys用法
功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWait(string keys); 说明 ...
- Debug 时,执行语句
Display View The Display View displays the result of evaluating an expression in the context of the ...
- HTTP 常见异常状态及Delphi IDHTTP 控件处理方式
以下部分为网上查找,部分为工作中整理 200:请求成功 202:请求被接受,但处理尚未完成 302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL(IDHTTP处理方 ...
- 使用Amazon Simple Queue Service(SQS) 实现简单的消息服务
一 引言 亚马逊Amazon作为云计算的领跑者推出了很多云服务,最近因为项目的原因,需要用到SQS服务,因此简要地写下这篇随笔,一来方便以后查阅,二来方便共享一些简单的操作. SQS即可以理解为一个 ...
- solr的schema.xml配置属性解释
schema.xml做什么? SOLR加载数据,创建索引和数据时,核心数据结构的配置文件是schema.xml,该配置文件主要用于配置数据源,字段类型定义,搜索类型定义等.schema.xml的配置直 ...
- Consul ACL
consul自带ACL控制功能,看了很多遍官方文档,没有配置步骤https://www.consul.io/docs/internals/acl.html 主要对各种配置参数解释,没有明确的步骤,当时 ...
- centos 7 安装mysql5.6rpm格式
1查看是否安装了mysql rpm -qa|grep -i mysql 如果安装了请卸载:rpm -e --nodeps MySQL... 2.没有安装则进行如下操作 下载mysql rpm ta ...
- 聊聊 JDK 阻塞队列源码(ReentrantLock实现)
项目中用到了一个叫做 Disruptor 的队列,今天楼主并不是要介绍 Disruptor 而是想巩固一下基础扒一下 JDK 中的阻塞队列,听到队列相信大家对其并不陌生,在我们现实生活中队列随处可见, ...
- pageadmin网站制作 如何修改和管理网站模板
在使用pageadmin CMS 的同时,遇到问题可以参考官网帮助中心.1.网站模板目录地址/templates目录, 2.点击展开后,每个目录就是一个网站模板, 前端设计师制作的新版本都可以放到这个 ...