中文编程入门(Lua5.4.6中文版)第八章 Lua 数组 联动我的世界

在"我的世界"的编程领域里,数组就像一个储存箱,用来整齐有序地放置各种类型的矿石、物品或数据。这里的Lua数组可以是单层箱子(一维数组),也可以是多层嵌套的箱子系统(多维数组)。

一维数组: 想象你有一个拥有三个槽位的工具箱,每个槽位可以存放一种物品:

复制代码
--创建一个装有"Lua教程"和"冒险指南"的工具箱
局部 工具箱 = {"Lua教程", "冒险指南"}

-- 探索工具箱中的物品
因为 索引 = 1, #工具箱 做
   输出(工具箱[索引])
结束

-- 输出结果:
--Lua教程
--冒险指南

这里值得注意的是,在"我的世界"式的Lua中,工具箱的编号从1开始,而不是0。如果尝试访问不存在的槽位,则会得到虚空之物(nil)。

另外,即使我们故意从0开始探索工具箱:

复制代码
--创建一个装有"Lua教程"和"冒险指南"的工具箱
局部 工具箱 = {"Lua教程", "冒险指南"}


因为 索引 = 0, #工具箱 + 1 做
       输出(工具箱[索引])
    结束
    
-- 输出结果:
--nil
--Lua教程
--冒险指南
--nil

可以看到,编号为0的槽位确实为空。

负数索引: 更神奇的是,这个工具箱还可以通过负数索引来访问后方的槽位:

复制代码
局部 魔法箱 = {}
因为 i = -2, 4 做
   魔法箱[i] = i * 2
结束

因为 索引 = 1, 4 做
   输出("正常顺序",魔法箱[索引])
结束

输出("-----------分界线-----------------")

因为 索引 = -2, 2 做
   输出("魔法顺序",魔法箱[索引])
结束

-- 输出结果:
--正常顺序        2
--正常顺序        4
--正常顺序        6
--正常顺序        8
-----------分界线-----------------
--魔法顺序        -4
--魔法顺序        -2
--魔法顺序        0
--魔法顺序        2
--魔法顺序        4

这样看来,我们的工具箱就像个时空穿越箱,能通过正负数索引访问前后任意位置的物品。

多维数组: 现在,我们构建一个三行三列的矿石矩阵,就像一个由9个小箱子组成的大型储物架:

复制代码
-- 初始化矿石矩阵
局部 矿石矩阵 = {}
因为 行 = 1, 3 做
   矿石矩阵[行] = {}
      因为 列 = 1, 3 做
         矿石矩阵[行][列] = 行 * 列
      结束
结束

-- 探索并取出矿石
因为 行索引 = 1, 3 做
   因为 列索引 = 1, 3 做
      输出(矿石矩阵[行索引][列索引])
   结束
结束


-- 输出结果:
--1
--2
--3
--2
--4
--6
--3
--6
--9

此外,为了节省空间,我们可以采用特殊的索引方式来排列矩阵中的矿石:

复制代码
-----------分界线-----------------")

-- 创造一个紧凑型矿石阵列
局部 紧凑型矿石矩阵 = {}
局部 最大行数 = 3
局部 最大列数 = 3
因为 当前行 = 1, 最大行数 做
   因为 当前列 = 1, 最大列数 做
      局部 扁平化索引 = (当前行 - 1) * 最大列数 + 当前列
      紧凑型矿石矩阵[扁平化索引] = 当前行 * 当前列
   结束
结束

-- 按照特殊索引方式提取矿石
因为 行索引 = 1, 最大行数 做
   因为 列索引 = 1, 最大列数 做
      局部 扁平化索引 = (行索引 - 1) * 最大列数 + 列索引
      输出(紧凑型矿石矩阵[扁平化索引])
   结束
结束



-- 输出结果:
--1
--2
--3
--2
--4
--6
--3
--6
--9

这样一来,我们的Lua数组就如同"我的世界"中的各类存储设施,不仅能够灵活高效地管理资源,还能以多种方式实现不同维度的数据组织与访问。

相关推荐
星夜离尘561 分钟前
MATLAB 线性去趋势为何损伤低频正弦:联合最小二乘估计幅相与漂移
开发语言·matlab
程序员清风33 分钟前
双指针与滑动窗口:高效处理连续区间
开发语言·算法
开开心心就好1 小时前
文件被占用删不掉?解锁工具强制删除
java·运维·服务器·开发语言·前端·pdf·ocr
云和数据.ChenGuang1 小时前
python大小整数范围解析
java·开发语言·python
fensnote1 小时前
西门子 S7 PLC 内部寄存器读写 Demo(C 语言)
c语言·开发语言
benchmark_cc2 小时前
量化项目启动时,应该先设计数据接口还是先编写策略?从系统架构角度做出正确选择
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885722 小时前
如何用 Python 判断一只股票“追涨”还是“抄底”更有效?
android·开发语言·python
denlaku2 小时前
JDK 15 新特性详解
java·开发语言
滴滴答答哒2 小时前
C# 技巧:优雅实现对象的“局部更新”与“字段合并”
开发语言·c#
灯澜忆梦3 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法