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

LINQ:获取分为子序列的数字序列的最小值和最大值,linq,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、11 蒂亚, 萨沙应该可以 var numbers = new[] { 3, 2, 5, 9, 9, 6, 7, 2, 5, 11, 2

如何将数字序列拆分为数字的子组,并使用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、11

蒂亚, 萨沙应该可以

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;
这应该可以做到

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;
使用的方法进行分组,您可以使用:

var query = source.Batch(3, batch => new[] { batch.Min(), batch.Max() })
                  .SelectMany(x => x);
使用的方法进行分组,您可以使用:

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

您将
6
分为两组,并删除
5
。如果你有一组一个号码怎么办
{1,2,3}{4}
?@Kobi:这很可能是一个打字错误,尽管它没有影响预期的结果(据我所知)。可能重复的您有两组
6
,并删除了
5
。如果你有一组一个号码怎么办
{1,2,3}{4}
?@Kobi:这很可能是一个打字错误,尽管它没有影响预期的结果(据我所知)。一点的可能重复是,如果最后一个项目单独在其组中,它将加倍<代码>{1}->
{1,1}
。当然,它符合要求。有一点是,如果最后一项单独在其组中,它将加倍<代码>{1}->
{1,1}
。当然,它符合要求。