1

how can I split a sequence of numbers into subgroups of numbers and get the local minimum and maximum of the subgroups with linq?

If I have a sequence of, lets say 11 items { 3, 2, 5, 9, 9, 6, 7, 2, 5, 11, 2 }
I want to split this into subgroups with 3 or less items.

So I get the following 4 subgroups: { 3, 2, 5 } , { 9, 9, 6 } , { 7, 2, 5} , { 11, 2}

The final return values of the LinQ expression (getting min and max for each group) should be 2, 5, 6, 9, 2, 7, 2, 11

TIA, Sascha

3
  • You have 6 in two groups, and dropped the 5. What if you have a group of one number? {1,2,3}{4}? Commented Oct 27, 2010 at 5:24
  • @Kobi: It was likely a typo, though it didn't affect what the desired result would be (as far as I can tell). Commented Oct 27, 2010 at 5:30
  • possible duplicate of Split List into Sublists with LINQ Commented Feb 18, 2013 at 10:32

2 Answers 2

4

This should do it.

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; 
Sign up to request clarification or add additional context in comments.

Comments

3

Well, using MoreLINQ's Batch method to do the grouping, you could use:

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

1 Comment

One point is that the last item will be doubled if it is alone in its group. {1}->{1,1}. Of course, it fits the requirements.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.