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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是js的严格模式

设立严格模式的原因&#xff1a; - 消除Javascript语法的一些不合理、不严谨之处&#xff0c;减少一些怪异行为; - 消除代码运行的一些不安全之处&#xff0c;保证代码运行的安全&#xff1b; - 提高编译器效率&#xff0c;增加运行速度&#xff1b; - 为未来新版本的Javascrip…

Linux驱动设计ioctl函数的cmd参数不能为2

Linux驱动程序设计的时候偶然发现的ioctl()函数的cmd参数不能为2&#xff0c;如果为2,ioctl()函数返回-1&#xff0c;网上说就是这样的&#xff0c;正常&#xff0c;不知道为什么&#xff0c;stack overflow上有一个外国学友的建议&#xff1a; “In general, you want to comp…

代码解说Android Scroller、VelocityTracker

在编写自己定义滑动控件时经常会用到Android触摸机制和Scroller及VelocityTracker。Android Touch系统简单介绍&#xff08;二&#xff09;:实例具体解释onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制须要用到的函数进行了具体的解释。本文主要介绍两个重要…

Effective_STL 学习笔记(四十四) 尽量使用成员函数代替同名的算法

有些容器拥有和 STL 算法同名的成员函数。 关联容器提供了 count、find、lower_bound、upper_bound 和 euqal_range list 提供了 remove、remove_if、unique、merge 和 reverse 大多数时候应该用成员函数代替手写算法&#xff0c;这样做的两个理由&#xff1a; 比起算法&#x…

(NFS移植到arm上)编译portmap和nfs-utils

为了在播放机上实现NFS服务器的功能&#xff0c;我们已经在uClibc中打开了完整RPC支持&#xff0c;并且在新编译的内核中打开了NFS服务器支持。此外还有两个软件包也是提供NFS服务所必需的&#xff1a;portmap和nfs-utils。portmap为RPC程序提供端口映射服务&#xff0c;nfs-ut…

HTML5上传预览

http://cobain-li.iteye.com/blog/2296538转载于:https://www.cnblogs.com/winyh/p/7850049.html

支付宝支付

1 申请商户平台 2 申请开放平台 3 申请APP支付 4 创建应用 (名称&#xff0c;logo) 5 生成RSA秘钥&#xff08;公钥&#xff0c;私钥&#xff09; 6 在应用中配置公钥 7 配置其他内容&#xff0c;包括iOS bundle ID。配置安卓包名&#xff0c;和签名。 获取appid&#xff0c;公…

HttpRequest Java原生代码封装

HttpRequest Java原生代码封装 get提交 post提交 name1value1&name2value2 的形式 json形式两种形式 package com.beisun.mbp.mbp.controller;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWrit…

Linux 系统目录

/ 根目录 /bin 存放必要的命令 /boot 存放内核以及启动所需的文件等 /dev 存放设备文件 /etc 存放系统的配置文件 /home 用户文件的主目录&#xff0c;用户数据存放在其主目录中 /lib 存放必要的运行库 /mnt 存放临时的映射文件系统&#xff0c;我们常把软驱和光驱挂装在这里的…

linux多线程学习设置线程调度权限

pthread_setschedparam 设置线程的权限 int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param) 参数 1. target_thread是使用pthread_create所获得的线程ID。   2&#xff0e;线程的调度有三种策略&#xff1a;SCHED_OTHER、…

不可错过的CMS学习笔记

引子 带着问题去学习一个东西&#xff0c;才会有目标感&#xff0c;我先把一直以来自己对CMS的一些疑惑罗列了下&#xff0c;希望这篇学习笔记能解决掉这些疑惑&#xff0c;希望也能对你有所帮助。 CMS出现的初衷、背景和目的&#xff1f; CMS的适用场景&#xff1f; CMS的tr…

团队合作及个人成长

通过前一章的学习&#xff0c;我了解到了关于建模的很多初步的知识&#xff0c;但是这和成为一名软件工程师是远远不够的&#xff0c;完成一个程序通常都是一个团队&#xff0c;而这个团队重要的肯定是需要一些流程&#xff0c;这样才能让程序有条不紊的运行着。在这么一个团队…

相机工作原理

轻轻一按&#xff0c;你的相机就把光子转换为了比特。于是一张相片就保存到了你的 iPhone 里。 让我们假设一下你身处室外&#xff0c;环顾四周。三亿里之外&#xff0c;太阳无时无刻不在发射光子。它们需要花上 8 分钟之久才能到达我们舒适的星球。有一些光子撞击到你周围的物…

Android Studio使用心得

说实话 開始接触这个工具 真的认为非常恶心 毕竟大陆被墙 非常多东西用起来不是非常方便 并且Eclipse转到Android Studio还是一个跨度 废话不多说 以下 讲下我遇到的问题 1. 安装的时候&#xff08;Setup Wizard - Download Components&#xff09; 这个要下载非常长时间 甚至…

CentOS用户和用户组的操作

2019独角兽企业重金招聘Python工程师标准>>> CentOS用户和用户组的操作 長得太帥忚四種檌 关注 2018.05.12 16:40* 字数 312 阅读 115评论 0喜欢 0 用户组的操作 1.添加用户组&#xff1a; groupadd 组名2.修改组名 groupmod -n 新组名 原组名删除用户组groupdel 组…

vue webpack配置分析

写在前面&#xff1a;作为 Vue 的使用者我们对于 vue-cli 都很熟悉&#xff0c;但是对它的 webpack 配置我们可能关注甚少&#xff0c;今天我们为大家带来 vue-cli#2.0 的 webpack 配置分析 vue-cli 的简介、安装我们不在这里赘述&#xff0c;对它还不熟悉的同学可以直接访问 v…

Linux用户空间与内核地址空间

Linux 操作系统和驱动程序运行在内核空间&#xff0c;应用程序运行在用户空间&#xff0c;两者不能简单地使用指针传递数据&#xff0c;因为Linux使用的虚拟内存机制&#xff0c;用户空间的数据可能被换出&#xff0c;当内核空间使用用户空间指针时&#xff0c;对应的数据可能不…

关于主键的设计、primary key

主键&#xff1a;用于唯一标识一个表中一行数据。 外键&#xff1a;用于建立两个表之间的关系&#xff0c;A表中有一列是B表中的主键&#xff0c;那么A表中这列的数据就受到B表主键的约束。 那么关于主键应该如何设计呢&#xff0c;这里我说下优缺点&#xff1a; 1.用自动增长字…

浅谈微信smali注入

作者&#xff1a;郭少雷 搞android搞了几年也没搞出个啥牛逼app出来&#xff0c;眼看时下最火的app微信如此火热&#xff0c;实在想搞搞它&#xff0c;索性就想着给它加点东西进去。 以下内容纯属本人个人爱好&#xff0c;仅限个人学习android用途以及对android的深入了解。 首…

从0到1使用Kubernetes系列(四):搭建第一个应用程序

上一篇文章《从0到1使用Kubernetes系列&#xff08;三&#xff09;&#xff1a;使用Ansible安装Kubernetes集群》中&#xff0c;我们搭建了一套Kubernetes集群&#xff0c;接下来将在本文中介绍如何使用Kubernetes部署一个Nginx并通过Pod IP、Service IP、Ingress这三种方式访问…