Lua语言入门 - Lua 数组

Lua 数组

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

在 Lua 中,数组不是一种特定的数据类型,而是一种用来存储一组值的数据结构。

实际上,Lua 中并没有专门的数组类型,而是使用一种被称为 "table" 的数据结构来实现数组的功能。

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

在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始。

一维数组

一维数组是最简单的数组,其逻辑结构是线性表。

使用索引访问数组元素:

local myArray = {10, 20, 30, 40, 50};
print("myArray[1]:", myArray[1]);
print("myArray[3]:", myArray[3]);
print("myArray[5]:", myArray[5]);

以上代码执行输出结果为:

要计算数组的长度(即数组中元素的个数),你可以使用 # 操作符:

local myArray = {10, 20, 30, 40, 50};

local length = #myArray

print("myArray length:", length);-- 计算数组长度

以上代码执行输出结果为:

一维数组可以用 for 循环出数组中的元素,如下实例: 

-- 创建一个数组
local myArray = {"I", "am", "a", "handsome", "programmer"};

-- 循环遍历数组
for i = 1, #myArray do
    print(i, myArray[i]);
end

以上代码执行输出结果为:

lua 索引默认从 1 开始:

-- 创建一个数组
local myArray = {"I", "am", "a", "handsome", "programmer"};

-- 循环遍历数组
for i = 0, #myArray do
    print(i, myArray[i]);
end

 以上代码执行输出结果为:

正如你所看到的,我们可以使用整数索引来访问数组元素,如果指定的索引没有值则返回 nil

除此外我们还可以以负数为数组索引值:


local array = {};

for i = -3, 3 do
   array[i] = i * 32;
end

for i = -3, 3 do
   print(i, array[i])
end

 以上代码执行输出结果为:

我们也可以向数组中添加元素:

-- 创建一个数组
local myArray = {10, 20, 30, 40, 50};

-- 添加新元素到数组末尾
myArray[#myArray + 1] = 60;


-- 循环遍历数组
for index = 1, #myArray do
    print(index, myArray[index]);
end

 以上代码执行输出结果为:

我们也可以删除数组中元素:

-- 创建一个数组
local myArray = {"I", "am", "a", "handsome", "programmer"};

-- 循环遍历数组
for i = 1, #myArray do
    print(i, myArray[i]);
end

print("--------------");

-- 删除第三个元素
table.remove(myArray, 3)

-- 循环遍历数组
for i = 1, #myArray do
    print(i, myArray[i]);
end

以上代码执行输出结果为:

多维数组

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

以下是一个三行三列乘法口诀表的阵列多维数组:

-- 初始化数组
local array = {};
for i = 1, 9 do
   array[i] = {};
      for j = 1, 9 do
         array[i][j] = i * j
      end
end

-- 访问数组
for i = 1, 9 do
   for j = 1 , i do
      io.write(string.format("%02d*%02d=%02d, ", i, j, array[i][j]));
   end
   print(" ");
end

以上代码执行输出结果为:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Linux(ubuntu22.04)搭建rust开发环境

1.安装rust 1.安装curl: sudo apt install curl 2.安装rust最新版 curl --proto ‘https’ --tlsv1.2 https://sh.rustup.rs -sSf | sh 安装完成后出现:Rust is installed now. Great! 重启当前shell即可 3.检验是否安装成功 rustc --version 结果出现&…

链表OJ题型讲解与总结

目录 一.引言 二.链表题型详细讲解 一.移除链表元素 二.反转单链表 三.链表的中间结点 四.链表返回倒数第k个节点 五.合并两个有序链表 六.链表分割 七.链表的回文结构 三.总结与提升 一.引言 在我们学习完单链表与双链表后,真诚建议初学者能够掌握单双链表…

深入理解 Fork/Join 并行计算框架

在并发编程领域,任务模型可以分为简单并行任务、聚合任务和批量并行任务。然而,还有一种广泛应用的任务模型——分治(Divide and Conquer)。分治是一种解决复杂问题的思维方法,它通过将复杂问题分解为多个相似的子问题…

小尺寸低功耗蓝牙模块在光伏清扫机器人上的应用

一、引言 随着可再生能源的迅速发展,光伏发电系统的清洁与维护变得越来越重要。光伏清扫机器人通过自动化技术提高了清洁效率,而蓝牙模组的集成为这些设备提供了更为智能的管理和控制方案。 二、蓝牙模组的功能与实现: 蓝牙模组ANS-BT103M…

沁恒CH32V208蓝牙串口透传例程:修改透传的串口

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

【触想智能】工业安卓一体机日常维护注意事项以及其应用领域分析

工业安卓一体机是一种集成了安卓操作系统的工业控制设备。它广泛应用于各种工业场景,为生产和管理提供了便利。 为了保证工业安卓一体机的正常运行和延长其寿命,日常维护工作是十分重要的。下面是一些工业安卓一体机日常维护的注意事项,以及其…

12.6深度学习_模型优化和迁移_模型移植

八、模型移植 1. 认识ONNX ​ https://onnx.ai/ ​ Open Neural Network Exchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。 ​ ONNX的规范及代码主要由微软…

2-2-18-14 QNX系统架构之 TCP/IP 网络

阅读前言 本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个…

实战:MyBatis适配多种数据库:MySQL、Oracle、PostGresql等

概叙 很多时候,一套代码要适配多种数据库,主流的三种库:MySQL、Oracle、PostGresql,刚好mybatis支持这种扩展,如下图所示,在一个“namespace”,判断唯一的标志是iddatabaseId,刚好写…

电子信息工程自动化 单片机彩灯控制

摘要 随着社会经济和科学技术的不断进步,人们在保持发展的同时,环境带给人类的影响已经不足以让我们忽视,所以城市的美化问题慢慢的进入了人们的眼帘,PLC的产生给带电子产品带来了巨大变革,彩灯的使用在城市的美化中变…

【后台管理系统】-【组件封装】

目录 组件封装搜索组件table列表组件content组件自定义插槽定制modal组件动态获取options数据 组件封装 搜索组件 给页面写一个配置文件,将配置文件传入组件,可直接生成页面,以下面页面为例, 新建src/views/main/system/depart…

「嵌入式系统设计与实现」书评:学习一个STM32的案例

本文最早发表于电子发烧友论坛:【新提醒】【「嵌入式系统设计与实现」阅读体验】 学习一个STM32的案例 - 发烧友官方/活动 - 电子技术论坛 - 广受欢迎的专业电子论坛!https://bbs.elecfans.com/jishu_2467617_1_1.html 感谢电子发烧友论坛和电子工业出版社的赠书。 …

设计模式:20、状态模式(状态对象)

目录 0、定义 1、状态模式的三种角色 2、状态模式的UML类图 3、示例代码 0、定义 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 1、状态模式的三种角色 环境(Context):环境是一个类&#xff0…

idea中新建一个空项目

目的,为了在同一个目录下有多个小的项目:使用IDE为idea2022。 步骤: 点击新建项目,点击创建空项目,这里选择空项目是将其作为其他项目的一个容器,如图所示: 然后点击文件->项目结构&#xf…

Java基础复习

“任何时候我也不会满足,越是多读书,就越是深刻地感到不满足,越感到自己知识贫乏。科学是奥妙无穷的。” ——马克思 目录 一、方法&方法重载 二、运算符 三、数据类型 四、面向对象 1. 面向对象思想 2. 引用传递 3. 访问权限修饰…

嵌入式里的“移植”概念

这里因为最近一年看到公司某项目很多代码上有直接硬件的操作,这里有感而发,介绍移植的概念。 一、硬件 先上一个图: 举个例子,大学里应该都买过开发板,例如st的,这里三个层次, 内核&#xff…

量子计算与商业转型之旅

近年来,各组织对量子计算的应用有所增加,并使全球商业运营发生了显著变化。《财富商业洞察》的一份报告显示,2022 年量子计算市场价值为 7.17 亿美元,预计到 2030 年将达到 65.28 亿美元。 从本质上讲,量子计算机与经…

周末和男朋友户外运动美好时光

周末的时光总是那么令人期待,仿佛一周的忙碌和疲惫都在这一刻得到了释放。这次,我和男朋友决定到户外去锻炼身体,享受一下大自然的馈赠。 清晨的阳光透过窗帘的缝隙洒进房间,我懒洋洋地睁开眼睛,看到男朋友已经在一旁整…

【Git】:标签管理

目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本:标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样…

QT的ui界面显示不全问题(适应高分辨率屏幕)

//自动适应高分辨率 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一、问题 电脑分辨率高,默认情况下,打开QT的ui界面,显示不全按钮内容 二、解决方案 如果自己的电脑分辨率较高,可以尝试以下方案:自…