【问题标题】:How to assign to a jagged array?如何分配给锯齿状数组?
【发布时间】:2023-03-15 09:51:01
【问题描述】:

我正在编写一个最终将播放连接四的短程序。

Here it is so far, pastebin

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

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

我认为是这样的:

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

当我这样做时board[5][2] = '*' 我明白了

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

而不是我想要的:

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

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


(来源:cubeupload.com

【问题讨论】:

  • 正如我所说的earlier,你需要一个 MCVE,因为我不相信它是这样工作的。
  • @KirkWoll 完成,,,

标签: c# arrays multidimensional-array jagged-arrays


【解决方案1】:

您正在以错误的方式创建锯齿状数组!

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] = '*';

【讨论】:

  • 是的,这是正确的答案。尽管我对 OP 的困惑表示同情。在某种程度上,这很自然。
  • @theonlygusti,你最终会爱上它的。在每种编程语言中,语法都可能非常微妙。但是对您 +1 表示您的问题和困惑是合理且有趣的。 :)
  • 请不要在 C# 爱好者中这么说。 ;)(我大多是孩子,但我们不要开始讨论动态和静态类型语言之间争论的潘多拉魔盒。;))
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 2020-04-02
  • 1970-01-01
  • 2020-02-02
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多