none
Сортировка при работе с ObservableCollection RRS feed

  • Вопрос

  • public class TypeCollMax { public decimal Price { get; set; } public int Volume {get; set;}

    } public static ObservableCollection<TypeCollMax> CollMax20tick;

    CollMax20tick = new ObservableCollection<TypeCollMax>();

    В коллекции предположим 1000 элементов. Цена дискретна, предположим 20 вариантов цены.

    Требуется для элементов с 300 по 500:

    1. суммировать объемы по каждой цене и получить цену с максимальным накопленным объемом и этот объем.

    2. Лучший вариант--получить сортировку по убыванию в виде списка с ценой и накопленным объемом по цене.


    Eugene

    16 сентября 2013 г. 2:38

Ответы

Все ответы

  • TypeCollMax[] result=CollMax20tick.
        Skip(300).
        Take(200).
        GroupBy(a=>a.Price,a=>a.Volume,(a,b)=>new TypeCollMax{Price=a,Volume=b.Sum()}).
        OrderByDescending(a=>a.Volume).
        ToArray();

    • Помечено в качестве ответа Евгений771 16 сентября 2013 г. 8:03
    • Изменено PetSerAl 18 сентября 2013 г. 20:27
    16 сентября 2013 г. 4:17
  • Извините. Чуть-чуть не точно получилось. У меня там есть дополнительное поле:

    В общем цифры условны, главное мне нужно выделение не по Count, а по параметру, который все время растет. Т к Count постоянно меняется, то у меня так удобнее получилось.

    public class TypeCollMax
    
    {
    
    public Int32 CommTick;
    public decimal Price { get; set; }
    
    public int Volume {get; set;}
    
    }

    Я так могу сделать?:

    TypeCollMax[] result=CollMax20tick
        .Where(a=>a.CommTick>=300 && a.CommTick<=500)
        .GroupBy(a=>a.Price,a=>a.Volume,(a,b)=>new TypeCollMax{Price=a,Volume=b.Sum()})
        .OrderByDescending(a=>a.Volume)
        .ToArray();
    А в общем, спасибо за ответ.



    Eugene


    16 сентября 2013 г. 6:29
  • Только сначала сортировка (OrderBy), а потом уже Skip, пропускаться в неупорядоченном списке.

    Или, Евгений, 300 и 500 это не порядковые номера, а цены?

    16 сентября 2013 г. 6:31
    Отвечающий
  • Да. Можете сделать так.
    16 сентября 2013 г. 6:40
  • Первоначально я вопрос задал именно по Count=300  и Count=500.

    Но в процессе реализации понял, что Count постоянно меняется и я ввел дополнительный счетчик элементов, который не зависит от вставки нового нулевого элемента и от обрубания хвоста.(при ограничении размера коллекции). Т к все операции провожу в привязке к определенному найденному элементу и его запоминаю по свойству CommTick.


    Eugene


    16 сентября 2013 г. 7:53