4

次の 2 つの方法のいずれかで配列を初期化できることはわかっています。

  1. ループ (メモリ リフレクションの問題なし)
  2. Enumerable.Repeat(おそらくメモリの問題が発生しますか? リンク: Enumerable.Repeat にはメモリの問題がありますか? )

2 つの質問があります。

  1. Array.ForEachこの方法で配列を初期化できますか?

    double[][] myarr = new double[13][];
    
    Array.ForEach(myarr, *enter_code_here*);
    

    私は次のものに置き換えenter_code_hereてみました:

    s => s = new double[2];
    

    しかし、それは初期化されませんmyarr

  2. メモリの問題のない他の配列初期化方法は何ですか?

4

3 に答える 3

8

Enumerable.Repeat任意の配列を初期化するために問題なく使用できます。注意する必要があるのは、配列要素が参照型の場合、次の 2 つの方法があるということだけです。

// #1: THIS ARRAY CONTAINS 10 REFERENCES TO THE SAME OBJECT
var myarr = Enumerable.Repeat(new object(), 10).ToArray();

// #2: THIS ARRAY CONTAINS REFERENCES TO 10 DIFFERENT OBJECTS
var myarr = Enumerable.Range(0, 10).Select(i => new object()).ToArray();

// #3: SAME RESULT AS #2 BUT WITH Enumerable.Repeat
var myarr = Enumerable.Repeat(0, 10).Select(i => new object()).ToArray();
于 2012-04-09T09:39:58.797 に答える
3

A1:いいえ、できません。Foreachは、パラメーターとして要素を使用してメソッドを実行するだけで、要素を変更しません。

A2:次の方法を使用して問題を解決できます

static T[][] CreateArray<T>(int rows, int cols)
{
    T[][] array = new T[rows][];
    for (int i = 0; i < array.GetLength(0); i++)
        array[i] = new T[cols];

    return array;
}
于 2012-04-09T09:33:08.827 に答える
0

これは、256 行 x 2 列の配列を作成し、すべての値を -1 に初期化する方法です。

int[][] myArr = Enumerable.Range(0, 256).Select(i => new int[2] {-1, -1}).ToArray();

于 2014-05-22T16:02:26.007 に答える