, LINQ Select, .
, - :
var sequences = items
.SelectWithPreviousResult(
new { Item = -1, GroupNumber = 0 },
(item, previous) => new
{
Item = item,
GroupNumber = previous.Item == x
? previous.GroupNumber
: previous.GroupNumber + 1 })
.GroupBy(x => x.GroupNumber, x => x.Item);
, GroupNumber, 0 , . GroupNumber .
, , SelectWithPrevious . LINQ , . SelectWithPreviousResult :
public static class LinqExtensions
{
public static IEnumerable<TResult> SelectWithPreviousResult<TSource, TResult>(
this IEnumerable<TSource> items,
TResult defaultResult,
Func<TSource, TResult, TResult> func)
{
var previousResult = defaultResult;
foreach (var item in items)
{
var result = func(item, previousResult);
previousResult = result;
yield return result;
}
}
}
, , Aggregate.
source
share