【问题标题】:Having trouble understanding multidimensional arrays in as3无法理解 as3 中的多维数组
【发布时间】:2013-12-30 13:26:21
【问题描述】:

假设我有一些类似的代码:

private function makeGrid():void
    {
        _grid = new Array();

        for(var i:int = 0; i < stage.stageWidth / GRID_SIZE; i++)
        {
            _grid[i] = new Array();

            for(var j:int = 0; j < stage.stageHeight / GRID_SIZE; j++)
            {
                _grid[i][j] = new Array();
            }
        }
    }

我不太明白发生了什么。我在第一个 for 循环中确定了所需的列数,在第二个中确定了行数,但我不明白为什么要使用 _grid[i]_grid[i][j] 制作数组。

例如,_grid[i] = new Array(); get 被调用了 16 次(800px/50px),那么这将构成 16 个数组,对吗?如果第二个 for 循环已经在计算我需要的行数,为什么还需要这些?

【问题讨论】:

  • 使用您提供的代码,您正在为我假设的二维网格创建一个三维数组。 _grid = new Array() 声明为您的列设置数组。 _grid[i] 为每一列i 设置一个行数组。然而,最后一个 _grid[i][j] 将为每一列中的每一行创建一个第三个数组。将其视为 Z 轴或深度。
  • 有道理,这是来自一个关于让人工智能在网格中移动的教程。谢谢!

标签: arrays actionscript-3 multidimensional-array


【解决方案1】:

我将详细说明已经评论过的内容。假设您正在创建一个由行和列组成的 2D 网格,并且您希望在每个“单元格”或网格的指定索引处存储某种数据。

第一步是创建第一个数组来保存行或列(您首先选择的并不重要,因为您可以调整for 循环)。

第一个for 循环创建一个新行,然后在下一个内部循环中填充该行的所有列(如果我们选择了首先创建的列,那么我们将填充列的所有行)。在这种情况下,内部循环使用另一个数组创建所有列(使其成为 cmets 中提到的 3 维数组)。

这样做的原因是为了组织和易于查找。如果您想查看存储在第 3 行的第 1 列中的数据,就像 _gird[2][0] 一样简单。

现在关于为什么要像_grid[i][j] = new Array(); 那样制作第三维,它特定于需要在该行和列中存储什么样的数据。

【讨论】:

  • 谢谢!这很有帮助,在本教程中,存储在 _grid[i][j] 中的数据是一个会在网格上滚动的球。
  • 在您的代码中,它不是一个球,而是一个数组。 _grid[i][j] = new Array()。这就是使其成为 3 维数组的原因。第一个维度是外部数组。第二个维度是_grid[I],其中包含一个Array。在 _grid[I] 中的每个 j 处,您正在添加另一个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2023-03-23
相关资源
最近更新 更多