重构 LINQ ForEach 以返回 IEnumerable<T>

5

我正在使用以下静态方法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)
{
    ...
}

有没有可能将CreateArray方法重构成以下形式:

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

1

我认为在这里使用PLINQ可能会很有用:

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

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

嘿,svick,我以为是对的,但实际上结果并没有按照“i”的顺序排序。我的意思是,我可以并行运行Func(i).Count(),但结果应该放在“i”位置... - Filippo Vitale
谢谢svick,我不知道AsOrdered()存在。 - Filippo Vitale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接