说句实话,每当看到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-普通循环和迭代器循环相关推荐

  1. 基础知识:if判断、while循环、for循环

    阅读目录 今日学习内容 1.if 判断(流程控制的一种) 写重复的代码是程序员最不耻的行为,所以我们需要while循环和for循环 ,_! 2.while循环(条件循环) 3.for循环(迭代器循环) ...

  2. 游戏开发学习笔记——lua脚本语言——安装、汉化与小测试(解决lua运行代码乱码问题)

    游戏开发学习笔记--lua脚本语言--安装.汉化与小测试 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: Lua 是一种轻量小巧的脚本语言,用 ...

  3. Python学习笔记三之编程练习:循环、迭代器与函数

    Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...

  4. pythonwhile循环怎么修改数据类型_python开发学习day05 (while循环; for循环; 数字类型操作)...

    2020-06-05 目录: 一.流程控制之while循环 1.1 什么是while循环? 1.2 为什么要用while循环? 1.3 怎么用while循环? 1.3.1 基本用法 1.3.2 死循环 ...

  5. Lua程序设计 | 模块和包、泛型迭代器和for、元表和元方法

    From<Programming in Lua> by Roberto Ierusalimschy 文章目录 模块和包 函数 require 模块重命名 搜索路径 搜索器 Lua语言中编写 ...

  6. 【笨木头Lua专栏】基础补充04:迭代器初探

    今天学习的内容还蛮有意思的,让我兴奋了一下~ 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明,原文地址: http://www.benmutou.com/archives/1714 文章来源:笨木 ...

  7. Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令

    Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令 文章目录 Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令 info server info clie ...

  8. Lua 编程学习笔记

    文章目录 Lua 编程学习笔记 一.环境安装 二.Lua 基本语法 1. 注释 2. 标识符 3. 变量 4. 数据类型 5. Lua 运算符 三.循环与流程控制 1. 循环 2. 流程控制 四.函数 ...

  9. 【笨木头Lua专栏】基础补充05:迭代器番外篇

    关于迭代器的内容, 还有一点点,不过已经无关紧要了,应该算是一种扩展吧,就一起来开开眼界好了~ 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明,原文地址: http://www.benmutou. ...

最新文章

  1. python画图角度_Python画图
  2. 图像降噪算法——图像噪声模型
  3. 怎么判断再一个局域网内一个ip被两台机器占用_交换机与 VLAN 到底是怎么来的...
  4. 大数据、数据挖掘、机器学习与模式识别的关系
  5. Tips--解决安装matplotlib无法使用pyplot的问题
  6. Memcached 学习---(4)Memcached 连接
  7. wechat.php+获取昵称,微信后台代码,获取用户昵称
  8. 小米MIX Alpha获得百万美金技术大奖;索尼或将推出无边框手机;Linus 不建议用 ZFS | 极客头条...
  9. 存储过程插入100 条数据
  10. Linux中进程的基本概念
  11. 【python】dict4ini和xmltodict模块用途
  12. C++ 函数参数中和区别
  13. 手把手教你升级到MySQL 8.0
  14. 网页设计之 HTML代码的理解.
  15. visio 2003 怎么样画括号
  16. 平板电脑的桌面计算机图标,苹果平板电脑桌面图标删除不了怎么办
  17. 葫芦兄弟java7723_雪人兄弟(官方正版)
  18. 应用电路笔记(1)-三极管8550和8050应用
  19. 融资融券是对A股明显利好
  20. PHP Warning: ‘ vcruntime140.dll‘ 14.0 is not compatible with this PHP build linked with 14.16 in Unk

热门文章

  1. 为什么博图中放置按下按钮无反应_为什么点击按钮没反应呢?
  2. 常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」
  3. php kafka storm,php的kafka踩坑(二)
  4. 深度学习之自编码器(4)变分自编码器
  5. oracle关闭 manager,Oracle Enterprise Manager 11g 启停
  6. 人工智能考题可能性猜测
  7. 图论--拓扑排序--判断一个图能否被拓扑排序
  8. 玩转GIT系列之【git pull和git fetch的区别】
  9. [深度学习] 面试常见问题+解析汇总
  10. sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系