【问题标题】:Using jagged with multidimensional arrays使用锯齿状多维数组
【发布时间】:2015-11-13 12:09:45
【问题描述】:

这里有新成员。有很多关于数组的帖子,但我没有看到这个,所以我想知道这是否可能。

我有一个 11 x 10 的游戏板。我有一个阵列来布置方格。最上面一行是 a[0][0] - a[0][10],最下面一行是 a[9][0] - a[9][10],中间是你所期望的。

将棋盘想象成棋盘。一块移动到一个正方形并放置在该特定位置的阵列中。扭曲是你可以在一个正方形上放一堆碎片。这就是锯齿状数组的用武之地,因为堆栈中的块数可能会有所不同。

我的问题是,我可以在板上的每个点的多维数组中嵌套一个锯齿状数组吗?

我能想到的唯一另一种方法是拥有 110 个锯齿状数组,每个位置一个,根本没有多维数组。那会是这样做的方法吗?

我知道我有很多关于数组的知识要学习,所以如果有人能指出我应该查找的方向,我将不胜感激。谢谢。

【问题讨论】:

  • 当然——语法是a[][][]。这是一个由数组的锯齿状数组组成的锯齿状数组。
  • 谢谢。因此,如果我在底角有一个锯齿状数组,它将是 a[9][0][0]、a[9][0][1]、a[9][0][2] 等,因为它会移动在阵列上?
  • 为什么要使用交错数组而不是多维数组?锯齿状数组的全部意义在于它可以是锯齿状的。您的游戏板显然在每一行中具有相同数量的列,这正是多维数组的工作原理。
  • 您对游戏板的看法是正确的,但多维数组不会处理堆叠在同一个正方形中的棋子。

标签: c# multidimensional-array jagged-arrays


【解决方案1】:

如果堆栈中的棋子数量可以变化,在我看来,您真正想要的是一个表示游戏板的二维数组,其中包含堆栈的实例。这些可以是一些自定义数据类型,或者您可以只使用List<T>(例如List<Piece>,其中Piece 是您的游戏块类型)。

例如:

List<Piece>[,] board = new List<Piece>[11,10];

for (int row = 0; row < 11; row++)
    for (int column = 0; column < 10; column++)
        board[row, column] = new List<Piece>();

通过在此处使用List&lt;T&gt;,您的棋盘以每个位置的空列表开始,您可以通过在列表中添加或删除它们来添加或删除棋子。

如果“堆栈”实际上是一个独立的游戏单元本身,那么将它们表示为自定义类型可能更有意义。在这种情况下(取决于游戏玩法),您实际上可能会在每个棋盘数组元素中重新分配堆栈。我不知道……您的问题中没有足够的信息来深入探讨实施细节。

【讨论】:

  • 谢谢彼得。您使用离散游戏单元提出的要点。当您的棋子移到堆栈顶部时,您可以选择移到另一个方格或将堆栈作为一个单元移动。我从未想过使用列表。我不能肯定这将是最好的选择,但就给我一个立足点而言,你的回答是完美的。现在我可以深入研究并开始将其组合在一起。时间会证明它是否有效,但我并没有期待一个解决方案,而是一个方向。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多