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总结6:元素的操作
1 empty方法 //html <div> <p></p> <span></span> </div> //js $('div) ...
- sql语言的一大类 DML 数据的操纵语言
-DML(insert,update,delete) 1.插入数据insert into 表名(列,列...)values(值,值...)//当插入的数据与表格一一对应时,列可以省略insert in ...
- Ubuntu重复循环启动的快速解决方法
如果因为在配置java或者adb环境变量时修改profile文件导致的在登录界面输入密码后重复循环启动的问题,下面总结网上和实践找到快速解决的方法啦! 1.在登录界面按下ctrl+alt+F1进入命令 ...
- JW Player开始播放和结束播放事件的捕获
项目中使用到jwPlayer,需要在用户开始播放盒结束播放的时候触发一些事件,所以研究JWPlayer. <script type="text/javascript"> ...
- 安装Python-Windows
安装Python-Windows 在开始Python编程前,需要先安装Python环境.Python安装包可以到Python的官网下载,官网地址是https://www.python.org/,如果想 ...
- CDC--Demo
--CDC通过对事务日志的异步读取,记录DML操作的发生时间.--类型和实际影响的数据变化,然后将这些数据记录到启用--CDC时自动创建的表中.通过cdc相关的存储过程,可以获--取详细的数据变化情况 ...
- C++11左值引用和右值引用
转载:https://www.cnblogs.com/golaxy/p/9212897.html C++11的左值引用与右值引用总结 概念 1.&与&& 对于在C++中,大家 ...
- MySQL数据库(四)
操作数据库表的内容: -- 向表中插入数据:insert into table_name values(now(),'a'); insert into student (id,name,sex) va ...
- .net Timer定时执行
System.Timers.Timer可以实现数据库定时更新的功能 Global.asax void Application_Start(object sender, EventArgs e) { / ...
- Redis!
在安装redis完成时,使用windows管理redis工具时(例如RedisDesktopManager)时出现连接不上的问题时 ping一下你的ip 和 talnet ip 看看通不通. 如果不 ...