Lua编程笔录--Lua初识及语法四(数组,迭代器,table表)
来源:互联网 发布:python partial 编辑:程序博客网 时间:2024/05/21 18:32
前言:前面的知识点可以参考
Lua编程笔录--Lua初识及语法一(注释,变量命名,全局/局部变量,数据类型)
Lua编程笔录--Lua初识及语法二(循环,流程控制,函数)
Lua编程笔录--Lua初识及语法三(运算符和字符串)
Lua 数组
数组,就是相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。
Lua 数组的索引键值可以使用整数表示,数组的大小不是固定的。
一维数组
一维数组是最简单的数组,其逻辑结构是线性表。一维数组可以用for循环出数组中的元素,如下实例:
array = {"Lua", "Tutorial"}for i= 0, 2 do print(array[i])end
以上代码执行输出结果为:
nilLuaTutorial
正如你所看到的,我们可以使用整数索引来访问数组元素,如果知道的索引没有值则返回nil。
在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始。
多维数组
多维数组即数组中包含数组或一维数组的索引键对应一个数组。
以下是一个三行三列的阵列多维数组:
-- 初始化数组array = {}for i=1,3 do array[i] = {} for j=1,3 do array[i][j] = i*j endend-- 访问数组for i=1,3 do for j=1,3 do print(array[i][j]) endend
以上代码执行输出结果为:
123246369
Lua 迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址
在Lua中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。
泛型 for 迭代器
泛型 for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数、状态常量、控制变量。
泛型 for 迭代器提供了集合的 key/value 对,语法格式如下:
for k, v in pairs(t) do print(k, v)end
上面代码中,k, v为变量列表;pair(t)为表达式列表。
查看以下实例:
array = {"Lua", "Tutorial"}for key,value in ipairs(array) do print(key, value)end
以上代码执行输出结果为:
1 Lua2 Tutorial
Lua table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。
Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。
table(表)的构造
构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
-- 初始化表mytable = {}-- 指定值mytable[1]= "Lua"-- 移除引用mytable = nil-- lua 垃圾回收会释放内存
Table 操作
以下列出了 Table 操作常用的方法:
concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
2table.insert (table, [pos,] value):在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
3table.maxn (table)指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)
4table.remove (table [, pos])返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
5table.sort (table [, comp])对给定的table进行升序排序。
Table 连接
我们可以使用 concat() 方法来连接两个 table:
fruits = {"banana","orange","apple"}-- 返回 table 连接后的字符串print("连接后的字符串 ",table.concat(fruits))-- 指定连接字符print("连接后的字符串 ",table.concat(fruits,", "))-- 指定索引来连接 tableprint("连接后的字符串 ",table.concat(fruits,", ", 2,3))
执行以上代码输出结果为:
连接后的字符串 bananaorangeapple连接后的字符串 banana, orange, apple连接后的字符串 orange, apple
插入和移除
以下实例演示了 table 的插入和移除操作:
fruits = {"banana","orange","apple"}-- 在末尾插入table.insert(fruits,"mango")print("索引为 4 的元素为 ",fruits[4])-- 在索引为 2 的键处插入table.insert(fruits,2,"grapes")print("索引为 2 的元素为 ",fruits[2])print("最后一个元素为 ",fruits[5])table.remove(fruits)print("移除后最后一个元素为 ",fruits[5])
执行以上代码输出结果为:
索引为 4 的元素为 mango索引为 2 的元素为 grapes最后一个元素为 mango移除后最后一个元素为 nil
Table 排序
以下实例演示了 sort() 方法的使用,用于对 Table 进行排序:
fruits = {"banana","orange","apple","grapes"}print("排序前")for k,v in ipairs(fruits) doprint(k,v)endtable.sort(fruits)print("排序后")for k,v in ipairs(fruits) doprint(k,v)end
执行以上代码输出结果为:
排序前1banana2orange3apple4grapes排序后1apple2banana3grapes4orange
Table 最大值
table.maxn 在 Lua5.2 之后该方法已经不存在了,我们定义了 table_maxn 方法来实现。
以下实例演示了如何获取 table 中的最大值:
function table_maxn(t) local mn = 0 for k, v in pairs(t) do if mn < k then mn = k end end return mnendtbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"}print("tbl 长度 ", #tbl)print("tbl 最大值 ", table_maxn(tbl))
执行以上代码输出结果为:
tbl 长度 3tbl 最大值 26
- Lua编程笔录--Lua初识及语法四(数组,迭代器,table表)
- Lua编程笔录--Lua初识及语法八(错误处理及垃圾回收器)
- Lua编程笔录--Lua初识及语法三(运算符和字符串)
- Lua编程笔录--Lua初识及语法五(模块与包)
- Lua编程笔录--Lua初识及语法六(协同程序)
- Lua编程笔录--Lua初识及语法七(I/O操作)
- Lua编程笔录--Lua初识及语法九(面向对象)
- Lua编程笔录--Lua初识及语法一(注释,变量命名,全局/局部变量,数据类型)
- lua 函数初识(四)
- Lua table(表)
- Lua table(表)
- Lua语法小贴士(九)table库
- Lua学习(四)----数组
- Lua语法小贴士(四)字符串缓冲
- Lua table转C++数组
- lua------遍历数组和table
- Lua初识(1)
- Lua -- table(表)
- Java基础学习总结(85)——Java中四种线程安全的单例模式实现方式
- 56/57. Merge Intervals; Insert Interval
- ORACLE ERP各个模块的缩写
- 关于cell smart table scan一次问题处理
- 新页面中返回到上次浏览的页面位置
- Lua编程笔录--Lua初识及语法四(数组,迭代器,table表)
- 集算报表如何使用Echarts
- openvpn/git在win10上容易遇到的问题
- 工作流学习——重要概念扫盲篇一步曲
- 业余爱好者如何通过使用模板快速建站5(How do amateurs build their own websites with a template part-5)
- studio配置svn并提交代码至svn
- 打开 IDEA/Android studio 出现'tools.jar' seems to be not in IDEA classpath
- poj_1039 Pipe(直线与线段相交)
- 多线程下载