如何分配锯齿状阵列?

the*_*sti 6 c# arrays jagged-arrays multidimensional-array

我正在写一个简短的程序,最终将连接四个.

到目前为止,它是pastebin

有一部分不起作用.我在第16行声明了一个锯齿状数组:

char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();
Run Code Online (Sandbox Code Playgroud)

我认为这看起来像这样:

-------
-------
-------
-------
-------
-------
-------
Run Code Online (Sandbox Code Playgroud)

当我这样做时,board[5][2] = '*'我得到了

--*----
--*----
--*----
--*----
--*----
--*----
--*----
Run Code Online (Sandbox Code Playgroud)

而不是我想要的:

-------
-------
-------
-------
-------
--*----
-------
Run Code Online (Sandbox Code Playgroud)

它如何运行(输出应该只有一个星号):

myb*_*ame 6

你正在以错误的方式创建你的锯齿状阵列!

char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();
Run Code Online (Sandbox Code Playgroud)

Enumerable.Repeat将创建一个包含一个重复值的序列.因此,您将创建一个char [] [],其中每个数组都将指向相同的引用.在这种情况下,当您更改其中一个阵列时,您将更改所有阵列.

你需要以这种方式创建锯齿状数组,数组[5] [2]只会改变第5个数组:

char[][] array = Enumerable.Range(0, 7).Select(i => Enumerable.Repeat('-', 7).ToArray()).ToArray();

array[5][2] = '*';
Run Code Online (Sandbox Code Playgroud)