【问题标题】:Confusion with multidimensional array initialization in C#与 C# 中的多维数组初始化混淆
【发布时间】:2016-04-03 19:00:29
【问题描述】:

我是一名编程新手,刚开始学习数组。 让我感到困惑的是在 C# 中初始化多维数组的方式。那是因为我自己没有指定每个元素的坐标,但是 C# 以某种方式做到了。

更具体地说,假设我初始化了这个数组:

string[,] names = {
 {"Deadpool", "Superman", "Spiderman"}
 {"Catwoman", "Batman", "Venom"}
};

鉴于在单维数组初始化中,C# 首先将第一个值放在元素 [0] 中,我假设多维数组也是如此。但它不是对每个单独的维度都做同样的事情吗?这不可能是真的。因为那时它会将“Deadpool”放置在该行的元素 [0] 上,然后它会尝试将“Catwoman”放置在第一列的元素 [0] 上。如果是这种情况,鉴于第一行的元素 [0] 与第一列的元素 [0] 相同,“猫女”将替换“死侍”,因为两者都将写入 [0,0]。然而,使用foreach 在控制台上写入所有内容,两者都出现了。那么C#如何以及在哪里放置每个值,以避免一个维度的值覆盖另一个维度的值?

【问题讨论】:

标签: c# multidimensional-array array-initialization


【解决方案1】:

如果将 foreach 转换为 for 循环,它可能会更有意义:

static  void Main(string[] args)
       {
           string[,] names = {{"Deadpool", "Superman", "Spiderman"},{"Catwoman", "Batman", "Venom"}};

           for (int index0 = 0; index0 < names.GetLength(0); index0++)
           {
               for (int index1 = 0; index1 < names.GetLength(1); index1++)
               {
                   var name = names[index0, index1];
                   Console.Write(name);
               }
           }
       }

这本质上是 foreach 在幕后所做的。 如果您想了解它的实际工作原理,请从这里开始:

How does the Java 'for each' loop work?

How is foreach implemented in C#?

How do foreach loops work in C#?

【讨论】:

  • 哦,我明白了。这个例子帮助我理解了将值放置到元素的过程仅从第一个维度的 0 开始。第二个维度的值从 1 开始,跳过第一行,所以“死侍”最终出现在 [0,0] 中,“猫女”出现在 [1,0] 中。谢谢!
  • 很高兴 - 如果这回答了您的问题,请记住将其标记为答案。
  • 我做到了,但让我再问你一些事情。添加另一个维度和另一个带有 index2 的 for 循环,当我将行 var name = names[index0, index1] 更改为 var name = [index0, index1, index2] 时,我收到一个错误,我只能在 [] 内添加两个索引。为什么会这样?
猜你喜欢
  • 2015-08-28
  • 2011-04-03
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多