2012-10-21 8 views
5

:funcはのように見えるリファクタリングLINQのForEach返されるIEnumerableを私は次のよう<code>CreateArray</code>の静的メソッドを持つ配列作成してい<T>

public static int[] CreateArray(int size) 
{ 
    var ret = new int[size]; 
    ret[0] = 0; 
    ret[1] = 1; 

    Parallel.ForEach(Enumerable.Range(2, size - 2), i => 
    { 
     ret[i] = Func(i).Count(); 
    }); 

    return ret; 
} 

public static IEnumerable<int> Func(int i) 
{ 
    ... 
} 

はそれがでCreateArrayメソッドをリファクタリングすることは可能ですが次のようなもの:

public static int[] CreateArray(int size) 
{ 
    var tableFromIndex2 = ... 
    return new[] { 0, 1 } 
     .Concat(tableFromIndex2) 
     .ToArray(); 
} 

答えて

1

私はPL INQはここで役に立つかもしれません:

var tableFromIndex = ParallelEnumerable.Range(2, size - 2) 
     .AsOrdered() 
     .Select(i => Func(i).Count()); 

return new[] { 0, 1 } 
     .Concat(tableFromIndex) 
     .ToArray(); 
+0

こんにちは、私はそれが正しいと思ったが実際には私は 'i'で注文していない結果を得ました。私は 'Func(i).Count()'を並行して実行することはOKですが、結果は 'i'の位置に置かなければなりません... –

+0

あなたは正しいです、' AsOrdered() ' 。今修正されました。 – svick

+0

ありがとうsvick、私は 'AsOrdered()'が存在しないことを知っています –

関連する問題