Лучший отвечающий
Сортировка при работе с ObservableCollection

Вопрос
-
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
Все ответы
-
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
- Изменено Евгений771 16 сентября 2013 г. 6:38
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 16 сентября 2013 г. 6:47
16 сентября 2013 г. 6:29 -
Только сначала сортировка (OrderBy), а потом уже Skip, пропускаться в неупорядоченном списке.
Или, Евгений, 300 и 500 это не порядковые номера, а цены?
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 16 сентября 2013 г. 6:47
16 сентября 2013 г. 6:31Отвечающий -
Да. Можете сделать так.16 сентября 2013 г. 6:40
-
Первоначально я вопрос задал именно по Count=300 и Count=500.
Но в процессе реализации понял, что Count постоянно меняется и я ввел дополнительный счетчик элементов, который не зависит от вставки нового нулевого элемента и от обрубания хвоста.(при ограничении размера коллекции). Т к все операции провожу в привязке к определенному найденному элементу и его запоминаю по свойству CommTick.
Eugene
- Изменено Евгений771 16 сентября 2013 г. 7:55
16 сентября 2013 г. 7:53