lua | 数组与迭代器的使用

news2024/11/18 7:33:38

目录

一、数组

一维数组

多维数组

二、迭代器

泛型for迭代器

无状态的迭代器

多状态的迭代器


本文章为笔者学习分享

学习网站:Lua 基本语法 | 菜鸟教程

一、数组

 数组:相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组

 使用:数组的索引键值可以使用整数表示,数组的大小不固定

一维数组

其逻辑结构是线性表

使用:一维数组可以用for循环出数组中的元素

for i=0,2 do
    print(arr[i])
end
--从0循环到2,依次打印arr[]内的元素
--但是注意arr[0]=nil,因为在lua中的索引下标是从1开始的

--实例,打印对数组元素
arr={}
for i=-2,2 do
    arr[i]=i*2
end

for i=-2,2 do  --可以以负数为数组索引值
    printf(arr[i])
end
--[[打印结果
-4、-2
0
2
4
--]]

 

多维数组

多维数组:数组中包含数组或一维数组的索引键对应一个数组。

访问:

--初始化数组
arr={}
for i=1,3 do
    arr[i]={}
    for j=1,r dp
        arr[i][j]=i*j;
    end
end

--访问数组
for i=1,3 do
    for j=1,3 do
        print(arr[i][j])
    end
end
--[[打印结果
1
2
3
2
4
6
3
6
9
--]]

-- 不同索引键的三行三列阵列多维数组
--初始化数组
arr[]={}
maxRow=3
maxColumn=3
for row=1,maxRow do
    for col=1,maxColumn do
        arr[row*maxColumn+col]=row*col
    end
end
--访问数组
for row=1,maxRow do
    for col=1,maxColumn do
        print(arr[row*maxColumn+col])
    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的执行过程

  1. 初始化,计算in后面表达式的值,表达式应该返回泛型for需要的三个值:迭代函数、状态常量、控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个,会自动用nil补足,多出部分会被忽略
  2. 将状态常量和控制变量作为参数调用迭代函数
  3. 将迭代函数返回的值赋给常量列表
  4. 如果返回的第一个值为nil,循环结束,否则循环继续
  5. 回到第二部再次调用迭代函数

lua的迭代器包含以下两种类型:

  • 无状态的迭代器
  • 多状态的迭代器

无状态的迭代器

含义:不包含任何状态的迭代器

好处:在循环中我们可以利用无状态迭代器避免创建闭包花费额外代价

--实现数组n的平方
function square(iteratorMaxCount,currentNumber)
    if currentNumber < iteratorMaxCount
    then
        return currentNumber,currentNumber*currentNumber
    end

end 

for i,n in square,3,0
do    
    print(i,n)
end
--[[打印结果为:
1 1 
2 4
3 9
--]]

多状态的迭代器

       当迭代器需要保存多个状态信息,而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法是将所有的状态信息封装到table内,将table作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在table内,所以迭代器通常不需要第二个参数。

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

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

相关文章

就业Android倒数第二,IOS稳居倒数第一

在如今的互联网大环境下&#xff0c;相信有很多人都在为找工作而感到焦虑&#xff0c;每一投上十几份简历&#xff0c;收到的面试通知也就那么一两家&#xff0c;而且收到面试通知的都是一些小企业&#xff0c;工资低就不是很想去&#xff0c;工资高的岗位看了一下要求感觉自己…

解决uniapp在js文件中使用国际化报错问题

uniapp js 中如何使用国际化&#xff1f; 文章目录 uniapp js 中如何使用国际化&#xff1f;main.js 配置遇到问题解决方案Demo方式一&#xff1a;异步加载模块Promise 写法await写法 方式二&#xff1a;局部引入方式三&#xff1a;按需导入 main.js 配置 main.js 引入并初始化…

Python——pyqt5的计算器(源码+打包)

目录 一、效果图 二、源码 三、如何打包 四、如何减小打包程序大小&#xff08;方法1&#xff09; 五、如何减小打包程序大小&#xff08;方法2&#xff09; 学习视频 一、效果图 只是单纯的练手&#xff0c;然后再学习一下如何打包 二、源码 calculator_UI.zip - 蓝奏云…

论文阅读《Centralized Feature Pyramid for Object Detection》

论文地址&#xff1a;https://arxiv.org/pdf/2210.02093.pdf 源码地址&#xff1a;https://github.com/QY1994-0919/CFPNet 概述 特征金字塔模块在众多计算机视觉任务中都有优异的性能表现。针对现有的方法过渡关注于层间的特征交互而忽略了层内的特征交互的问题&#xff0c;本…

药物分子虚拟筛选规则

药物分子虚拟筛选规则 Lipinski Rule RO5是辉瑞公司资深药物化学家Christopher A. Lipinski在1997年提出&#xff0c;虽然随时代发展虽然其适用范围逐渐变窄&#xff0c;但仍然非常有参考意义。其主要内容如下&#xff1a; 分子量(Mw)小于500&#xff1b;氢键供体(HBD)数目小…

matlab 对线路板进行裁剪

缺陷图像目前还没有搞定————&#xff08;无奈&#xff09; test1 %Sobel方法 I imread(ChuanJian0.jpg); G rgb2gray(I); E1 edge(G, sobel); figure, subplot(2,2,1); imshow(I); title(Original Color Image); subplot(2,2,2); imshow(E1); title(Sobel Edge);E2 ed…

使用PyTorch构建神经网络,并计算参数Params

文章目录 使用PyTorch构建神经网络&#xff0c;并计算参数Params举例计算具有全连接层的神经网络的参数数量计算卷积神经网络的参数数量Params计算过程 总结 使用PyTorch构建神经网络&#xff0c;并计算参数Params 在深度学习中&#xff0c;模型的参数数量是一个非常重要的指标…

零基础学Java好找工作吗?好程序员告诉你入行Java有多惨?

为什么小源建议普通背景、零基础的大专生、本科生去学java编程呢&#xff1f; 因为真的香啊&#xff01;小白容易上岸&#xff0c;而且工作3年的话&#xff0c;基本年薪就能到50w&#xff08;只要你工作后也一直不断努力学习&#xff09;。java岗位属于技术岗&#xff0c;没有任…

Android进阶:Activity的生命周期和启动模式

Activity的生命周期和启动模式 作为Android四大组件之中存在感最强的组件&#xff0c;Activity应该是我们在学习Android中第一个碰到的新概念。在日常开发过程中我们肯定会用到Activity&#xff0c;但是关于Activity的一些细节问题运行机制我们可能还有一些不清楚的问题。今天…

调用百度文心AI作画API实现中文-图像跨模态生成

作者介绍 乔冠华&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c;2020级硕士研究生&#xff0c;张宏伟人工智能课题组。 研究方向&#xff1a;机器视觉与人工智能。 电子邮件&#xff1a;1078914066qq.com 一&#xff0e;文心AI作画API介绍 1. 文心AI作画 文…

全开源ChatGPT聊天机器人商业版源码/支持魔改/完全开放源代码

&#x1f388; 限时活动领体验会员&#xff1a;可下载程序网创项目短视频素材 &#x1f388; ☑️ 品牌&#xff1a;ChatGPT ☑️ 语言&#xff1a;PHP ☑️ 类型&#xff1a;ChatGPT ☑️ 支持&#xff1a;PCWAP &#x1f389; 有需要的朋友记得关赞评&#xff0c;需要的底部获…

C++哈希

目录 一、认识哈希表 1.unordered_set和unordered_map 2.哈希表的概念 二、闭散列哈希表的实现 1.底层本质 &#xff08;1&#xff09;哈希表的存储结构 &#xff08;2&#xff09;元素的插入与查找 &#xff08;3&#xff09;哈希冲突 &#xff08;4&#xff09;负载…

深入浅出C++ ——线程库

文章目录 线程库thread类的简单介绍线程函数参数原子性操作库 mutex的种类std::mutexstd::recursive_mutexstd::timed_mutexstd::recursive_timed_mutex lock_guard与unique_locklock_guardunique_lock condition_variable 线程库 thread类的简单介绍 在C11之前&#xff0c;涉…

“广东省五一劳动奖章”获得者卫晓欣:“她”力量让新兴技术更获认可

近日&#xff0c;2023年广东省庆祝“五一”国际劳动节暨五一劳动奖表彰大会顺利召开&#xff0c;大会表彰了2023年全国和省五一劳动奖、工人先锋号代表。 其中&#xff0c;来自FISCO BCOS开源社区产业应用合作伙伴广电运通的创新中心总监卫晓欣&#xff0c;凭借在区块链领域的…

分布式锁Redisson对于(不可重入、不可重试、超时释放、主从一致性)四个问题的应对

文章目录 1 Redisson介绍2 Redisson快速入门3 Redisson可重入锁原理4 Redisson锁重试和WatchDog机制5 Redisson锁的MutiLock原理 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff…

Ai作图可控性演进——从SD到MJ

背景 Ai作图从Diffusion模型开始&#xff0c;作图进入稳步发展快车道。然后用过diffusion系列作图的同学对产图稳定性&#xff0c;以及可控性都会颇有微词。diffusion系列作图方法在宏观层面上确实能够比较好的做出看上去还不错的图。然后当你细抠细节时候&#xff0c;发现这东…

远程服务器搭建jupyter lab并在本地访问

1、安装jupyter pip install jupyter 可以直接在base环境下安装 2、配置jupyter 2.1 密钥生成 进入python交互模式&#xff0c;输入以下代码&#xff1a; from jupyter_server.auth import passwd passwd()然后输入密码&#xff0c;得到一串密钥&#xff0c;保存一下 2.2…

Java多线程入门到精通学习大全?了解几种线程池的基本原理、代码示例!(第五篇:线程池的学习)

本文介绍了Java中三种常用的线程池&#xff1a;FixedThreadPool、CachedThreadPool和ScheduledThreadPool&#xff0c;分别介绍了它们的原理、代码示例以及使用注意事项。FixedThreadPool适用于并发量固定的场景&#xff0c;CachedThreadPool适用于执行时间短的任务&#xff0c…

Linux C/C++后台开发面试重点知识

Linux C/C后台开发面试重点知识 文章转载自个人博客: Linux C/C后台开发面试重点知识 查看目录 一、C 面试重点 本篇主要是关于 C 语言本身&#xff0c;如果是整个后台技术栈的学习路线&#xff0c;可以看这篇文章: Linux C 后台开发学习路线 对于 C 后台开发面试来说&…

27岁转行学云计算值得吗?能就业不?

27岁转行学云计算值得吗&#xff1f;能就业不&#xff1f; 首先&#xff0c;云计算当然值得转行了&#xff0c;如此肯定的观点&#xff0c;应该没有人会反对吧&#xff0c;尤其是对IT行业的现状以及就业市场有所了解的人。如果你对这一点有所怀疑也很正常&#xff0c;只要通过各…