LINQ:获取分为子序列的数字序列的最小值和最大值

时间:2010-10-27 05:18:10

标签: linq

如何将一系列数字拆分为数字子组,并使用linq获取子组的局部最小值和最大值?

如果我有序列,可以说11项{3,2,5,9,9,6,7,2,5,11,2} 我想将其拆分为3个或更少项目的子组。

所以我得到以下4个小组:{3,2,5},{9,9,6},{7,2,5},{11,2}

LinQ表达式的最终返回值(每组获得最小值和最大值)应为2,5,6,9,2,7,2,1

TIA, 萨沙

2 个答案:

答案 0 :(得分:4)

这应该这样做。

var numbers = new[] { 3, 2, 5, 9, 9, 6, 7, 2, 5, 11, 2 };
var query = from p in numbers.Select((n, i) => new { n, Group = i / 3 })
            group p.n by p.Group into g
            from n in new[] { g.Min(), g.Max() }
            select n;

答案 1 :(得分:3)

好吧,使用MoreLINQBatch方法进行分组,您可以使用:

var query = source.Batch(3, batch => new[] { batch.Min(), batch.Max() })
                  .SelectMany(x => x);