在Aggregate LINQ查询中反转顺序

时间:2012-11-04 06:40:32

标签: linq aggregate

我认为结果应该包含[1,1,2,2,3,3],但它包含[3,3,2,2,1,1]。为什么列表被颠倒了?

var sequence = new int[] { 1, 2, 3 };
var result = sequence.Aggregate(
            Enumerable.Empty<int>(),
            (acc, s) => Enumerable.Repeat(s, 2).Concat(acc));

由于

2 个答案:

答案 0 :(得分:3)

对于序列中的每个项目,您将重复连接到累积序列的开头。交换订单,以便连接到最后。

(acc, s) => acc.Concat(Enumerable.Repeat(s, 2))

另一方面,这样做更容易(也更有效率)来获得该序列。

var result =
    from s in sequence
    from x in Enumerable.Repeat(s, 2)
    select x;

答案 1 :(得分:1)

使用SelectMany实现更简单的方法:

 var sequence = new int[] { 1, 2, 3 };
 var result = sequence.SelectMany(i => new[] {i, i}).ToArray();