C# 重构LINQ ForEach以返回IEnumerable<;T>;
我正在使用以下C# 重构LINQ ForEach以返回IEnumerable<;T>;,c#,linq,plinq,C#,Linq,Plinq,我正在使用以下CreateArray静态方法创建数组: 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(); }); ret
CreateArray
静态方法创建数组:
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)
{
...
}
我认为PLINQ在这里很有用:
var tableFromIndex = ParallelEnumerable.Range(2, size - 2)
.AsOrdered()
.Select(i => Func(i).Count());
return new[] { 0, 1 }
.Concat(tableFromIndex)
.ToArray();
嘿,斯维克,我认为这是对的,但实际上我得到的结果不是按
I
排序的。我的意思是,我可以并行运行Func(I).Count()
,但是结果应该放在I
位置…谢谢svick,我不知道AsOrdered()
是否存在
var tableFromIndex = ParallelEnumerable.Range(2, size - 2)
.AsOrdered()
.Select(i => Func(i).Count());
return new[] { 0, 1 }
.Concat(tableFromIndex)
.ToArray();