2012-10-21 29 views
5

我創建具有以下CreateArray靜態方法數組:重構LINQ的ForEach返回IEnumerable的<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; 
} 

凡Func鍵的樣子:

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

嘿svick,我認爲它是正確的,但實際上我得到的結果不是'i'命令。我的意思是,我可以並行運行'Func(i).Count()',但是結果應該放在'i'的位置上... –

+0

你說得對,我忘了'AsOrdered()' 。現在修復。 – svick

+0

謝謝svick,我不知道'AsOrdered()'存在 –

相關問題