网站建设书籍论文,百度收录入口提交,平台卖货,如何免费域名注册目录
一、数组
一维数组
多维数组
二、迭代器
泛型for迭代器
无状态的迭代器
多状态的迭代器 本文章为笔者学习分享 学习网站#xff1a;Lua 基本语法 | 菜鸟教程 一、数组 数组#xff1a;相同数据类型的元素按一定顺序排列的集合#xff0c;可以是一维数组和多维数…目录
一、数组
一维数组
多维数组
二、迭代器
泛型for迭代器
无状态的迭代器
多状态的迭代器 本文章为笔者学习分享 学习网站Lua 基本语法 | 菜鸟教程 一、数组 数组相同数据类型的元素按一定顺序排列的集合可以是一维数组和多维数组 使用数组的索引键值可以使用整数表示数组的大小不固定
一维数组
其逻辑结构是线性表
使用一维数组可以用for循环出数组中的元素
for i0,2 doprint(arr[i])
end
--从0循环到2依次打印arr[]内的元素
--但是注意arr[0]nil因为在lua中的索引下标是从1开始的--实例打印对数组元素
arr{}
for i-2,2 doarr[i]i*2
endfor i-2,2 do --可以以负数为数组索引值printf(arr[i])
end
--[[打印结果
-4、-2
0
2
4
--]] 多维数组
多维数组数组中包含数组或一维数组的索引键对应一个数组。
访问
--初始化数组
arr{}
for i1,3 doarr[i]{}for j1,r dparr[i][j]i*j;end
end--访问数组
for i1,3 dofor j1,3 doprint(arr[i][j])end
end
--[[打印结果
1
2
3
2
4
6
3
6
9
--]]-- 不同索引键的三行三列阵列多维数组
--初始化数组
arr[]{}
maxRow3
maxColumn3
for row1,maxRow dofor col1,maxColumn doarr[row*maxColumncol]row*colend
end
--访问数组
for row1,maxRow dofor col1,maxColumn doprint(arr[row*maxColumncol])end
end
--[[打印结果
1
2
3
2
4
6
3
6
9
--]] 二、迭代器 迭代器是一种对象。能够用来遍历标准库容容器中的部分或全部元素每个迭代器独享代表容器中的确定的地址。
泛型for迭代器
泛型for在自己内部保存迭代器函数实际上保存三个值迭代器函数、状态常量、控制变量
泛型for迭代器提供了集合key/value对
for k,v in ipairs(t) do --k,v变量列表 ipairs(t)表达式列表,ipairs是LUA默认提供的迭代函数print(k, v)
end--实现数组n的平方
function square(...)
...
end --具体的实现省略for i,n in square,3,0
do print(i,n)
end
--[[打印结果为
1 1
2 4
3 9
--]]
for的执行过程
初始化计算in后面表达式的值表达式应该返回泛型for需要的三个值迭代函数、状态常量、控制变量与多值赋值一样如果表达式返回的结果个数不足三个会自动用nil补足多出部分会被忽略将状态常量和控制变量作为参数调用迭代函数将迭代函数返回的值赋给常量列表如果返回的第一个值为nil循环结束否则循环继续回到第二部再次调用迭代函数 lua的迭代器包含以下两种类型
无状态的迭代器多状态的迭代器
无状态的迭代器
含义不包含任何状态的迭代器
好处在循环中我们可以利用无状态迭代器避免创建闭包花费额外代价
--实现数组n的平方
function square(iteratorMaxCount,currentNumber)if currentNumber iteratorMaxCountthenreturn currentNumber,currentNumber*currentNumberendend for i,n in square,3,0
do print(i,n)
end
--[[打印结果为
1 1
2 4
3 9
--]]
多状态的迭代器 当迭代器需要保存多个状态信息而不是简单的状态常量和控制变量最简单的方法是使用闭包还有一种方法是将所有的状态信息封装到table内将table作为迭代器的状态常量因为这种情况下可以将所有的信息存放在table内所以迭代器通常不需要第二个参数。