Lua开发学习4-普通循环和迭代器循环
说句实话,每当看到Lua代码,我都感觉是半个SQL代码,写起来还是感觉有点恐怖。
while循环:
与C#的while循环类似,没有什么好说的;
--------Lua的while循环 while(condition)dostatementsend
For循环
exp1为起点,exp2为终点,exp3为步进值,若exp3没有写,则默认为1
Lua的For循环 for var=exp1,exp2,exp3 do <执行体> end
Repeat循环:
看起来很高大上的说法, 实则就是我们平时使用的do..while循环而已
a = 10 --[ 执行循环 --] repeatprint("a的值为:", a)a = a + 1 until( a > 15 )
迭代器循环:
C#里面的迭代器循环使用的最多的当然是foreach循环了,当然协程也是个迭代器循环,我们这里只是举例,所以我们这里就不要讲太多了
array = {"Lua", "Tutorial"} --一个Table,也能想象成一个字典
lua的迭代器分为无状态迭代器和多状态迭代器
无状态迭代器:
function square(iteratorMaxCount,currentNumber)if currentNumber<iteratorMaxCountthencurrentNumber = currentNumber+1return currentNumber, currentNumber*currentNumberend endfor i,n in square,3,0 --square是一个可以参与运行的函数,3和0为参数 doprint(i,n) end
多状态迭代器:
多状态迭代器可以遍历一个函数的结果集和pairs和ipairs两种特殊迭代方式
迭代函数的结果集:
array = {"Lua", "Tutorial"}function elementIterator (collection)local index = 0local count = #collection --井号能取出collection参数的数量,若为[1] = ,[2] = ,则取出从第一个元素连续最多元素的数量,假如没有3,直接跳到了[4] = ,则#collection的值为2-- 闭包函数return function ()index = index + 1if index <= countthen-- 返回迭代器的当前元素return collection[index]endend endfor element in elementIterator(array) doprint(element) end
pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出
local tab= { [1] = "a", [3] = "b", [4] = "c" } for i,v in pairs(tab) do -- 输出 "a" ,"b", "c" ,print( tab[i] ) end for i,v in ipairs(tab) do -- 输出 "a" ,k=2时断开 print( tab[i] ) end
ipairs的迭代,会像C#的foreach那样,挨个写入堆栈。
但重要点说明一下paris跌代,或取的数据顺序并不是一个让人很好理解的顺序,因为它并不会按照1234这种顺序排下来,paris迭代产生的结果列表的排列,是按照一定的希哈规律来排列的,所以并不是无规则的无序,而是按哈规则的有序。
如果数据量非常庞大的话,paris的希哈排列,会造成性能上非常大的优势,倘若将列表值赋值给C#,然后以linq、lambda的方式来取,则也并不需要有序。
所以不要纠结于paris中看似无序实则有序的排列。
转载于:https://www.cnblogs.com/vsirWaiter/p/6712529.html
Lua开发学习4-普通循环和迭代器循环相关推荐
- 基础知识:if判断、while循环、for循环
阅读目录 今日学习内容 1.if 判断(流程控制的一种) 写重复的代码是程序员最不耻的行为,所以我们需要while循环和for循环 ,_! 2.while循环(条件循环) 3.for循环(迭代器循环) ...
- 游戏开发学习笔记——lua脚本语言——安装、汉化与小测试(解决lua运行代码乱码问题)
游戏开发学习笔记--lua脚本语言--安装.汉化与小测试 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: Lua 是一种轻量小巧的脚本语言,用 ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
- pythonwhile循环怎么修改数据类型_python开发学习day05 (while循环; for循环; 数字类型操作)...
2020-06-05 目录: 一.流程控制之while循环 1.1 什么是while循环? 1.2 为什么要用while循环? 1.3 怎么用while循环? 1.3.1 基本用法 1.3.2 死循环 ...
- Lua程序设计 | 模块和包、泛型迭代器和for、元表和元方法
From<Programming in Lua> by Roberto Ierusalimschy 文章目录 模块和包 函数 require 模块重命名 搜索路径 搜索器 Lua语言中编写 ...
- 【笨木头Lua专栏】基础补充04:迭代器初探
今天学习的内容还蛮有意思的,让我兴奋了一下~ 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明,原文地址: http://www.benmutou.com/archives/1714 文章来源:笨木 ...
- Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令
Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令 文章目录 Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令 info server info clie ...
- Lua 编程学习笔记
文章目录 Lua 编程学习笔记 一.环境安装 二.Lua 基本语法 1. 注释 2. 标识符 3. 变量 4. 数据类型 5. Lua 运算符 三.循环与流程控制 1. 循环 2. 流程控制 四.函数 ...
- 【笨木头Lua专栏】基础补充05:迭代器番外篇
关于迭代器的内容, 还有一点点,不过已经无关紧要了,应该算是一种扩展吧,就一起来开开眼界好了~ 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明,原文地址: http://www.benmutou. ...
最新文章
- python画图角度_Python画图
- 图像降噪算法——图像噪声模型
- 怎么判断再一个局域网内一个ip被两台机器占用_交换机与 VLAN 到底是怎么来的...
- 大数据、数据挖掘、机器学习与模式识别的关系
- Tips--解决安装matplotlib无法使用pyplot的问题
- Memcached 学习---(4)Memcached 连接
- wechat.php+获取昵称,微信后台代码,获取用户昵称
- 小米MIX Alpha获得百万美金技术大奖;索尼或将推出无边框手机;Linus 不建议用 ZFS | 极客头条...
- 存储过程插入100 条数据
- Linux中进程的基本概念
- 【python】dict4ini和xmltodict模块用途
- C++ 函数参数中和区别
- 手把手教你升级到MySQL 8.0
- 网页设计之 HTML代码的理解.
- visio 2003 怎么样画括号
- 平板电脑的桌面计算机图标,苹果平板电脑桌面图标删除不了怎么办
- 葫芦兄弟java7723_雪人兄弟(官方正版)
- 应用电路笔记(1)-三极管8550和8050应用
- 融资融券是对A股明显利好
- PHP Warning: ‘ vcruntime140.dll‘ 14.0 is not compatible with this PHP build linked with 14.16 in Unk
热门文章
- 为什么博图中放置按下按钮无反应_为什么点击按钮没反应呢?
- 常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」
- php kafka storm,php的kafka踩坑(二)
- 深度学习之自编码器(4)变分自编码器
- oracle关闭 manager,Oracle Enterprise Manager 11g 启停
- 人工智能考题可能性猜测
- 图论--拓扑排序--判断一个图能否被拓扑排序
- 玩转GIT系列之【git pull和git fetch的区别】
- [深度学习] 面试常见问题+解析汇总
- sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系