2016-04-03 24 views
0

私はプログラミング初心者です。 私を混乱させるのは、C#で多次元配列を初期化する方法です。それは私自身が各要素の座標を指定していないからですが、C#は何とかそれを行います。C#での多次元配列の初期化との混乱

具体的には、のは、私はこの配列を初期化するとしましょう:要素の最初の値を配置することで、単一次元配列の初期化C#の開始に[0]、私は同じでも当てはまることを前提としていることを考えると

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

多次元配列もそうです。しかし、別々の次元ごとに同じことをしないのですか?これは真実ではありません。そのため、行の要素[0]に「Deadpool」を配置し、後で最初の列の要素[0]に「Catwoman」を配置しようとします。その場合、最初の行の要素[0]が最初の列の同じ要素[0]であるため、[0,0]に両方が書き込まれるため、 "Catwoman"が "Deadpool"を置き換えます。しかし、foreachを使用してすべてをコンソールに書き込むと、両方とも表示されます。ですから、C#はどのようにして各値を配置し、ある次元の値が別の次元の値を上書きしないようにしますか?

+1

うーん...中括弧で囲まれたデータ項目の二つのグループがあり、その余地はありませんあいまいさコンパイラは正しいことを行います。 –

+0

ようこそStackoverflowへ。あなたはあなたの配列をループすることができます。すべてここに記載されています:https://msdn.microsoft.com/en-us/library/9b9dty7d(v=vs.140).aspx –

答えて

0

あなたはそれが少しより多くの意味をマックかもしれないforループにforeachのを変換する場合:

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

ありがとうございます。この例では、要素に値を配置する手順は、最初の次元だけ0から始まることを理解できました。 2番目の次元の値は1から始まり、最初の行をスキップします。したがって、「Deadpool」は[0,0]に、「Catwoman」は[1,0]になりました。ありがとう! –

+0

私の喜び - これがあなたの質問に答えた場合は、それを答えとして記入してください。 – Wjdavis5

+0

私はしましたが、私はあなたに何かもっと尋ねます。 'var name = names [index0、index1]'行をvar name = [index0、index1、index2]に変更すると、もう一つの次元を追加し、もう一つはindex2のループを追加すると、2つしか追加できないというエラーが出ます[]内のインデックス。何故ですか ? –