如何分配给锯齿状数组?
How to assign to a jagged array?
我正在写一个小程序,它最终会玩连环四。
有一处不工作。我在第 16 行声明了一个锯齿状数组:
char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();
我认为它看起来像这样:
-------
-------
-------
-------
-------
-------
-------
当我这样做时 board[5][2] = '*'
我得到
--*----
--*----
--*----
--*----
--*----
--*----
--*----
而不是我想要的:
-------
-------
-------
-------
-------
--*----
-------
目前它是如何运行的(输出应该只有一个星号):
(来源:cubeupload.com)
您正在以错误的方式创建锯齿状数组!
char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();
Enumerable.Repeat
将创建一个包含一个重复值的序列。因此,您将创建一个 char[][],其中每个数组都将指向相同的引用。在这种情况下,当您更改其中一个数组时,您将更改所有数组。
您需要以这种方式创建锯齿状数组,数组[5][2] 只会更改第 5 个数组:
char[][] array = Enumerable.Range(0, 7).Select(i => Enumerable.Repeat('-', 7).ToArray()).ToArray();
array[5][2] = '*';
我正在写一个小程序,它最终会玩连环四。
有一处不工作。我在第 16 行声明了一个锯齿状数组:
char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();
我认为它看起来像这样:
-------
-------
-------
-------
-------
-------
-------
当我这样做时 board[5][2] = '*'
我得到
--*----
--*----
--*----
--*----
--*----
--*----
--*----
而不是我想要的:
-------
-------
-------
-------
-------
--*----
-------
目前它是如何运行的(输出应该只有一个星号):
(来源:cubeupload.com)
您正在以错误的方式创建锯齿状数组!
char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();
Enumerable.Repeat
将创建一个包含一个重复值的序列。因此,您将创建一个 char[][],其中每个数组都将指向相同的引用。在这种情况下,当您更改其中一个数组时,您将更改所有数组。
您需要以这种方式创建锯齿状数组,数组[5][2] 只会更改第 5 个数组:
char[][] array = Enumerable.Range(0, 7).Select(i => Enumerable.Repeat('-', 7).ToArray()).ToArray();
array[5][2] = '*';