Не удается установить / обновить какой-либо пакет / conda / navigator?

Вы можете использовать Linq GroupBy в модифицированной версии, которая группируется, только если эти два элемента смежны, тогда это легко:

var result = classes
    .GroupAdjacent(c => c.Value)
    .Select(g => new { 
        SequenceNumFrom = g.Min(c => c.SequenceNumber),
        SequenceNumTo = g.Max(c => c.SequenceNumber),  
        Value = g.Key
    });

foreach (var x in result)
    Console.WriteLine("SequenceNumFrom:{0} SequenceNumTo:{1} Value:{2}", x.SequenceNumFrom, x.SequenceNumTo, x.Value);

DEMO

Результат:

SequenceNumFrom:1  SequenceNumTo:2  Value:9
SequenceNumFrom:3  SequenceNumTo:5  Value:15
SequenceNumFrom:6  SequenceNumTo:6  Value:30
SequenceNumFrom:7  SequenceNumTo:7  Value:9

Это метод расширения для группировки смежных элементов:

public static IEnumerable> GroupAdjacent(
        this IEnumerable source,
        Func keySelector)
    {
        TKey last = default(TKey);
        bool haveLast = false;
        List list = new List();
        foreach (TSource s in source)
        {
            TKey k = keySelector(s);
            if (haveLast)
            {
                if (!k.Equals(last))
                {
                    yield return new GroupOfAdjacent(list, last);
                    list = new List();
                    list.Add(s);
                    last = k;
                }
                else
                {
                    list.Add(s);
                    last = k;
                }
            }
            else
            {
                list.Add(s);
                last = k;
                haveLast = true;
            }
        }
        if (haveLast)
            yield return new GroupOfAdjacent(list, last);
    }
}

и используемого класса:

public class GroupOfAdjacent : IEnumerable, IGrouping
{
    public TKey Key { get; set; }
    private List GroupList { get; set; }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return ((System.Collections.Generic.IEnumerable)this).GetEnumerator();
    }
    System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator()
    {
        foreach (var s in GroupList)
            yield return s;
    }
    public GroupOfAdjacent(List source, TKey key)
    {
        GroupList = source;
        Key = key;
    }
}

0
задан Sorade 19 January 2019 в 21:05
поделиться