C#での多次元配列の初期化(他の配列を使用)

arrays c# initialization multidimensional-array
C#での多次元配列の初期化(他の配列を使用)

C#では、次のような定数を使用して多次元配列を初期化することができます。

Object[,] twodArray = new Object[,] { {"00", "01", "02"},
                                      {"10", "11", "12"},
                                      {"20", "21", "22"} };

個人的には、ハードコードされた定数で配列を初期化することは、テスト演習以外では役に立たないと思います。 とにかく、私が切実に必要なのは、既存の配列を使用して上記のように新しい多次元配列を初期化することです。 (同じアイテム数ですが、コンテンツはもちろん実行時にのみ定義されます)。

私がやりたいことのサンプルです。

Object[] first  = new Object[] {"00", "01", "02"};
Object[] second = new Object[] {"10", "11", "12"};
Object[] third  = new Object[] {"20", "21", "22"};
Object[,] twodArray = new Object[,] { first, second, third };

残念ながら、これは有効なコードとしてコンパイルされません。 おかしい、私が試したとき

Object[,] twodArray = new Object[,] { {first}, {second}, {third} };

コードは_did_コンパイルして実行しましたが、結果は望み通りではありませんでした-3 x 3のオブジェクトの配列、出てきたのは3 x 1の配列の配列で、それぞれに3つの要素がありました。 それが起こるとき、私は私の配列にアクセスできません:

Object val = twodArray[3,3];

私が行かなければならない:

Object val = twodArray[3,1][3];

これは明らかに望ましい結果ではありません。

それでは、反復に頼らずに複数の既存の配列からこの新しい2D配列を初期化する方法はありますか?

  11  0


ベストアンサー

これは、ギザギザの配列に切り替えた場合に機能します。

int[] arr1 = new[] { 1, 2, 3 };
int[] arr2 = new[] { 4, 5, 6 };
int[] arr3 = new[] { 7, 8, 9 };

int[][] jagged = new[] { arr1, arr2, arr3 };

int six = jagged[1][2];

*編集*このスレッドを将来見つける人のために明確にするため

上記のコードサンプルも、概念的には同じですが別個の型であるギザギザの配列(_object [] [] _)ではなく配列の配列(_object [object []] _)になるため、不適切です。

5


あなたが本当に達成しようとしていることを完全に理解するのに苦労しています。 私がそれを正しく理解していれば、文字列の「リスト」がいくつかあり、それらを別のリストに保存する必要があります。

まず、配列よりも最新のアプローチを使用することをお勧めします。 C#では、IEnumerable <>およびIList <>インターフェイスと、それらから派生するすべてのものが提供されるため、昔ながらの配列に固執する必要はありません。

あなたはこのようなことをすることができます:

var list1 = new List { "foo1", "foo2", "foo3" };
var list2 = new List { "foo4", "foo5", "foo6" };
var list3 = new List { "foo7", "foo8", "foo9" };
var listOfStrings = new List> { list1, list2, list3 };

次に、「foo6」にアクセスする場合は、次のように記述します。

var temp = listOfStrings[1][2];

1


配列への配列参照を割り当てようとしています。 詳細については、http://msdn.microsoft.com/en-us/library/2s05feca.aspx [Jagged Arrays]を参照してください。

これを試して、

Object[] first = new Object[] { "00", "01", "02" };
Object[] second = new Object[] { "10", "11", "12" };
Object[] third = new Object[] { "20", "21", "22" };
Object[][] result = { first, second, third };

foreach (object [] ar in result)
   {
       foreach (object ele in ar)
        {
            Console.Write(" " + ele);
          }
       Console.WriteLine();
   }

1


タイトルとURLをコピーしました