数组

260次阅读
没有评论

共计 3362 个字符,预计需要花费 9 分钟才能阅读完成。

数组对象

数组对象用于存储数值(数字或文本)的列表。它在传统编程语言中的数组是类似的。

脚本编写

当使用 JavaScript 或 TypeScript 编码时,可以通过 IArrayInstance 脚本接口访问此对象的功能。(JavaScript 和 TypeScript 内置支持数组,但这允许与事件表中使用的数组进行交互。)

关于数组

数组最多支持三维。例如,十个值的简单列表将是一个 10 x 1 x 1 的数组。注意,您不应该在任何维度上设置大小为 0,否则整个数组将变为空;在未使用的维度上设置大小为 1 是正确的。

数组的每个元素可以存储一个数字或一些文本。元素中的数字或文本可以使用 Set 操作进行更改,并使用 At 表达式进行访问。例如,一个 10 x 10 x 1 的数组类似于一个 2D 网格,总共有 100 个值。可以使用 Set at XY 操作将一个数字存储在位置(3,7),并使用 Array.At(3,7) 访问。请注意,像 Construct 的其他部分一样,索引是从 0 开始的,因此第一个元素的索引是 0。在这个例子中,Array.At(0,0) 将返回网格中的第一个数字。

数组可以在任何元素中存储文本或数字。数字和文本也可以在一个数组内混合。

数组不会自动调整大小。如果您访问数组范围之外的值,它将返回数字 0。如果您设置数组范围之外的值,将不会有任何效果。

设计数组

您可以使用 Construct 的 Array Editor 付费计划仅设置数组的初始内容。您可以从项目栏创建一个新的数组数据文件作为项目文件。在运行时,您可以使用 AJAX 对象加载项目文件,并使用数组的 Load 操作从 AJAX 的 LastData 表达式读取数据文件。

操纵数组

一个一维数组,大小为 N x 1 x 1,充当 N 个值的简单列表。操纵类别中的动作(例如 Push, Pop)允许一维数组像其他数据结构一样使用。(这些操作适用于多维数组,但旨在用于一维情况。)

例如,以下方案实现了一个队列(先进先出,或 ’FIFO’):

  • 使用 Push front 添加新项

  • 使用 Array.Back 检索下一个值

  • 使用 Pop back 删除检索到的值
    以下方案实现了一个堆栈(后进先出,或 ’LIFO’):

  • 使用 Push back 添加新项

  • 使用 Array.Back 检索下一个值

  • 使用 Pop back 删除检索到的值
    数组属性
    宽度(X 维度)
    高度(Y 维度)
    深度(Z 维度)
    数组的大小。如果您想要一个一维数组(即值的列表),请使用 A x 1 x 1。如果您想要一个二维数组(即值的网格),请使用 A x B x 1。
    元素只读
    此属性指示数组中的总元素数。如果它为 0,则数组完全为空,无法存储任何数据。一个常见的错误是将 Y 或 Z 轴大小设置为 0,导致整个数组为空;此属性可帮助您识别此错误。还使用巨大的数组可能会导致非常高的内存使用率,并且元素计数还可以帮助您识别这种情况。
    数组条件
    在 X 处比较
    在 XY 处比较
    在 XYZ 处比较
    在数组中的一个位置比较一个值。索引是从 0 开始的。数组外的所有值都返回数字 0。如果使用“在 X 处比较”,则 Y 和 Z 索引为 0。如果使用“在 XY 处比较”,则 Z 索引为 0。
    比较大小
    比较数组的一个维度的大小,即该轴上的元素数量。
    对于每个元素
    一个重复条件,对数组中的每个元素运行一次。因此,它将运行宽度 x 高度 x 深度次。
    比较当前值
    只有在 For each element 循环中才有效,要么作为后续条件,要么在子事件中。这会将循环中正在迭代的当前值进行比较。
    包含值
    搜索整个数组以检查是否有任何元素包含给定值。例如,您可以使用此功能来测试字符串“sword”是否存储在数组中的任何位置。
    是否为空
    测试数组是否为空。当总元素数为零时,数组为空,计算为宽度 x 高度 x 深度。因此,当任何一个轴的大小为零时,数组为空。当使用数组作为数据结构(例如,推送和弹出值)时,这可能是有用的。
    数组动作
    清除
    将数组中的每个元素设置为给定值,默认为数字 0。
    在 X 处设置
    在 XY 处设置
    在 XYZ 处设置
    在数组中的一个位置写入一个值。索引是从 0 开始的。在数组范围之外写入没有效果。如果使用“在 X 处设置”,则 Y 和 Z 索引为 0。如果使用“在 XY 处设置”,则 Z 索引为 0。
    设置大小
    设置数组的维度。如果新的数组较小,则保留值,但如果新的数组较大,则将新元素设置为存储数字 0。如果任何维度为 0,则整个数组为空,因此通常所有维度至少为 1。
    下载
    调用浏览器下载包含数组内容的 JSON 格式的文件。
    加载
    从 JSON 格式的字符串加载数组的内容。这可以从 Download 操作、AsJSON 表达式或加载项目文件的 AJAX 对象中获取。
    推送
    在轴的开头(前面)或结尾(后面)添加一个新值。由于 Array 是一个 3D 值立方体,技术上这会插入一个带有给定值的新 2D 平面元素。然而,在 1D 数组中,这会添加一个元素,而在 2D 数组中,它会插入一个新行的元素。
    弹出
    从轴的开头(前面)或结尾(后面)删除一个值。由于 Array 是一个 3D 值立方体,技术上这会删除一个 2D 平面的元素。然而,在 1D 数组中,这将删除一个元素,而在 2D 数组中,它会删除一整行的元素。
    插入
    在轴上的特定索引处插入一个新值。由于 Array 是一个 3D 值立方体,技术上这会插入一个带有给定值的新 2D 平面元素。然而,在 1D 数组中,这会添加一个元素,而在 2D 数组中,它会插入一个新行的元素。
    删除
    从轴上的特定索引处删除一个值。由于 Array 是一个 3D 值立方体,技术上这会删除一个 2D 平面的元素。然而,在 1D 数组中,这将删除一个元素,而在 2D 数组中,它会删除一整行的元素。
    反转
    反转轴上元素的顺序。注意,在多维数组中,这只反转一个轴。例如,反转 2D 数组中的 X 轴将反转列的顺序,同时保留每列的内容。

    Shuffle

    沿着给定的轴将元素随机排序。当使用 2D 或 3D 数组时,根据所选的轴独立地对一维数组进行洗牌。例如,当选择 X 轴时,每行都独立地进行洗牌;当选择 Y 轴时,每列都独立地进行洗牌。

Sort

按照升序对轴上的元素进行排序。请注意,在多维数组中,这是基于轴上的第一个元素进行排序的。例如,在 2D 数组中对 X 轴进行排序将根据 Y 坐标 0 处的元素对列的顺序进行排序,同时保留每列的内容。

Split string

通过某个字符将字符串拆分为一维项目列表来设置数组。例如,用分隔符 "," 拆分字符串 "1,2,3" 并将类型设置为 Auto,将使数组大小设置为 3 x 1 x 1,并存储数字 1、2 和 3。Type 参数确定值是作为字符串还是数字读取。默认模式 Auto 将在令牌看起来像数字时将值设置为数字,否则设置为字符串。将类型设置为 String 或 Number 将确保所有值一致地设置为给定的数据类型。可以使用 JoinString 表达式将数组转换回字符串。

Splitting string 可以处理简单的情况,但有局限性。例如,无法在值内部出现分隔符,也无法明确指定值的数据类型。要处理更复杂的情况,请使用更强大的数据格式,如 JSON。

Array expressions

At(x)

At(x, y)

At(x, y, z)

在数组中检索位置的值。索引从零开始。读取数组外的值得到数字 0。如果未提供 Y 或 Z 索引,则使用 0。

CurX

CurY

CurZ

For each element 循环中每个维度的当前零基索引。

CurValue

For each element 循环中的当前值。这是 Array.At(Array.CurX, Array.CurY, Array.CurZ) 的快捷方式。

Width

Height

Depth

返回数组每个维度的大小。

Front

访问数组中的第一个值的快捷方式,与 At(0, 0, 0) 相同。

Back

访问 X 轴上的最后一个值的快捷方式,与 At(Self.Width – 1, 0, 0) 相同。

IndexOf

LastIndexOf

在数组 X 轴上搜索给定值,并返回找到该值的索引,如果未找到则返回 -1。IndexOf 查找第一个匹配的元素,而 LastIndexOf 查找最后一个匹配的元素。

AsJSON

以 JSON 格式的字符串形式返回数组的内容。稍后可以使用 Load 操作将其加载到数组中。

JoinString(separator)

通过将每个值转换为字符串并用分隔符连接它们来将一维数组转换为字符串。例如,如果一个数组的大小为 3 x 1 x 1 并存储值 1、2 和 3,那么表达式 Array.JoinString(",") 将返回字符串 1,2,3。这实际上是 Split string 操作的逆过程。

正文完
 0
评论(没有评论)