Всем нам знаком стандартный LINQ-метод GroupBy(). Он позволяет на основе некоего селектора разложить элементы в последовательности по группам. К сожалению, мы не можем в селекторе указать такое нетривиальное условие, как нахождение элементов рядом. А именно это мне и нужно было. Поиск по StackOverflow не дал каких-либо приемлемых решений, и я, скрепя душой, сел изобретать свой велосипед. Ниже представляю код метода аналогичного GroupBy() с одним отличием: группировка происходит только для рядом стоящих элементов.
К примеру, есть последовательность:
1 1 1 2 2 2 2 1 1 1 1 4 4 4 4 2 2 2
После группировки хотим получить следующие группы (в каждой строке по группе):
1 1 1
2 2 2 2
1 1 1 1
4 4 4 4
2 2 2