2016-12-07 3 views
2

で多次元配列内のすべてのアイテムを交換するが、私は、ループの多くを必要としないこれを行う方法を考えることはできません。は通常、私は以下のようなforループを使用する1次元アレイのランダムな値

for (int i = 0; i < myArray.length; ++i) 
{ 
    myArray[i] = rnd.Next(1, 500); 
} 
+0

配列の次元数がわからないというのですか? – juharr

+0

これを試してみてください:http://stackoverflow.com/questions/359881/how-to-set-values-in-a-multidimensional-array-using-a-linear-index –

答えて

5

あなたが試すことができBuffer.BlockCopyがループ(s)は隠蔽する低レベル:

// N-D array (whatever dimensions) 
    int[,,] array = new int[3, 5, 11]; 

    Buffer.BlockCopy(
    Enumerable 
     .Range(0, array.Length) 
     .Select(x => rand.Next(0, 500)) 
     .ToArray(), 
    0, 
    array, 
    0, 
    array.Length * sizeof(int)); // sizeof(int) : we copy bytes... 

を我々は1次元配列

を作成
Enumerable 
     .Range(0, array.Length) 
     .Select(x => rand.Next(0, 500)) 
     .ToArray() 

の全長がN-1のもの(array.Length == array.Length(0) * ... * array.GetLEngth(N))をN-Dにコピーします。

+1

話していた@TamirVered。基本的には、一時配列を操作して何もしません。 –

+1

@ Tamir Vered:ありがとう!あなたは間違いありません:引数の順序(ソースとターゲットの入れ替え)と間違った* bytes * size(sizeof(int)を乗算したはずです) –

0

使用つ以上のループ:

for (int i = 0; i < myArray.Length; ++i) 
{ 
    for (int j = 0; j < myArray[i].Length; ++j) 
    { 
     myArray[i][j] = rand.Next(0, 500); 
    } 
} 
+0

++私私は++すべきではない対? –

+3

彼は、 "私は、これを行う方法については、たくさんのループを伴わないとは思えません"と言います。 –

+0

@asdf_enel_hakこの使用法では、インクリメントの戻り値が使用されていないため、問題はありません。 – juharr

関連する問題