LINQ: разбить последовательность на группы
От: bySerge  
Дата: 26.08.09 10:13
Оценка:
Встретился с такой задачей (условие упрощено):
дана последовательность целых чисел. Например,
var numbers = new int[] { 1, 2, 2, 1, 1, 1, 3, 3 };

Надо разбить на группы так, чтобы группа состояла из одинаковых последовательных элементов и была размером не более 2.
Т.е. на выходе должно получится что-то вроде
{ {1}, {2, 2}, {1, 1}, {1}, {3, 3} }


Реализовать используя циклы легко, хочется максимально использовать LINQ.
Re: LINQ: разбить последовательность на группы
От: AngeL B. Россия  
Дата: 26.08.09 10:30
Оценка:
Здравствуйте, bySerge, Вы писали:

S>Реализовать используя циклы легко, хочется максимально использовать LINQ.

если Вам от этого легче, то можно вот так.

var numbers = new int[] { 1, 2, 2, 1, 1, 1, 3, 3 };
            
int _groupNo = 0, _count = 0;
int? _prev = null;
var groups = numbers
    .GroupBy(x => {
        if( _count > 1 || _prev != x )
        {
            _count = 0;
            _groupNo++;
        }
        _prev = x;
        _count++;
        return _groupNo;
    });
Re[2]: LINQ: разбить последовательность на группы
От: bySerge  
Дата: 26.08.09 10:40
Оценка:
Здравствуйте, AngeL B., Вы писали:
AB>если Вам от этого легче, то можно вот так.

До этого я тоже дошёл, только намного больше времени потратил, чем Вы.
Может есть более изящное решение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.