如何对不规则数组进行赋值?

6

我正在编写一个短小的程序,最终将玩连四游戏。

这是目前的代码,pastebin

有一部分还没有起作用。我在第16行声明了一个锯齿数组:

char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();

我认为它看起来像这样:

-------
-------
-------
-------
-------
-------
-------

当我执行这个操作 board[5][2] = '*' 时,我得到了

--*----
--*----
--*----
--*----
--*----
--*----
--*----

我想要的是:

-------
-------
-------
-------
-------
--*----
-------

目前的运行方式(输出应只有一个星号):


(来源:cubeupload.com


就像我之前说的那样,你需要提供一个 MCVE,因为我不相信它可以这样工作。 - Kirk Woll
@KirkWoll 完成,,, - theonlygusti
1个回答

6
您创建不规则数组的方式有误!
char[][] board = Enumerable.Repeat(Enumerable.Repeat('-', 7).ToArray(), 7).ToArray();
Enumerable.Repeat将创建一个包含重复值的序列。因此,您将创建一个char [] [],其中每个数组都将指向同一引用。在这种情况下,当您更改其中一个数组时,所有数组都会更改。

您需要按此方式创建不规则数组,array [5] [2]将仅更改第5个数组:

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

array[5][2] = '*';

是的,这是正确的答案。尽管我对楼主的困惑感到同情。在某种程度上,这是自然的。 - Kirk Woll
1
@theonlygusti,你最终会喜欢它的。在每种编程语言中,语法都可能非常微妙。但+1给你的问题和困惑是真实而有趣的。 :) - Kirk Woll
1
请不要在C#爱好者中间这么说。 ;) (我大多数时候都是开玩笑的,但让我们不要开始动态类型语言和静态类型语言之间的争论,那是一个潘多拉魔盒。;)) - Kirk Woll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接