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

Вопрос
-
Имеется коллекция:
public class TypeCollMax { public decimal Price { get; set; } public int Count { get; set; } } public static ObservableCollection<TypeCollMax> CollMax20tick;
CollMax20tick = new ObservableCollection<TypeCollMax>();
В коллекции 50 членов с разными ценами. Как получить самую часто встречающуюся цену? т е цену, с которой существует наибольшее количество элементов.Если 2 цены имеют одинаковое количество членов, то нужно взять большую из цен.
Также нужно знать количество включений у этой цены.
Eugene
- Изменено Евгений771 28 августа 2013 г. 16:32
28 августа 2013 г. 16:25
Ответы
-
Это называется гистограмма.
Для гистограммы Вы должны назначить интервалы,
например, цена колеблется от 0 до 100,
значит нужно назначить интервалы -
0 - 9.99, 10 - 19.99, ..., 90 - 100.
или какие-то иные, на Ваше усмотрение.
Затем произвести выборку для каждого интервала,
т.е. определить, сколько исходных значений попали в каждый интервал.
Как определить количество исходных значений в каждом заданном интервале -
List<int>IntervalLst=new List<int>{0,10,20,30,...};
for (int i=0;i<IntervalLst.Count-1;i++)
int I = Collection.Select(v=>v.Price>=IntervalLst[i] && v.Price<IntervalLst[i+1]).Count();
- Изменено QazRdx 28 августа 2013 г. 16:54
- Помечено в качестве ответа Евгений771 28 августа 2013 г. 17:45
28 августа 2013 г. 16:51 -
В коллекции все это легко находится.
double Max = Collection.Max(v=>v.Price); // Аналогично Min
int Count=Collection.Count;
Полноценная гистограмма именно так и находится.
По типу гистограммы определяется закон распределения -
нормальный, логнормальный и пр.
которыми характеризуется
представительность данных,
т.е. можно ли этим данным верить.
- Помечено в качестве ответа Евгений771 28 августа 2013 г. 17:44
28 августа 2013 г. 17:38
Все ответы
-
Это называется гистограмма.
Для гистограммы Вы должны назначить интервалы,
например, цена колеблется от 0 до 100,
значит нужно назначить интервалы -
0 - 9.99, 10 - 19.99, ..., 90 - 100.
или какие-то иные, на Ваше усмотрение.
Затем произвести выборку для каждого интервала,
т.е. определить, сколько исходных значений попали в каждый интервал.
Как определить количество исходных значений в каждом заданном интервале -
List<int>IntervalLst=new List<int>{0,10,20,30,...};
for (int i=0;i<IntervalLst.Count-1;i++)
int I = Collection.Select(v=>v.Price>=IntervalLst[i] && v.Price<IntervalLst[i+1]).Count();
- Изменено QazRdx 28 августа 2013 г. 16:54
- Помечено в качестве ответа Евгений771 28 августа 2013 г. 17:45
28 августа 2013 г. 16:51 -
Цена на рынке дискретна, с шагом tick. Мне нужно из 50 значений получить цену и Count самой частой цены. Получается в вашем случае я должен сначало найти максимум и минимум, затем определить Count цен и пройтись от минимума до максимума как по интервалам вашим методом.
И в этом же цикле я должен искать максимум I и запоминать цену при этом максимуме?
Eugene
28 августа 2013 г. 17:27 -
В коллекции все это легко находится.
double Max = Collection.Max(v=>v.Price); // Аналогично Min
int Count=Collection.Count;
Полноценная гистограмма именно так и находится.
По типу гистограммы определяется закон распределения -
нормальный, логнормальный и пр.
которыми характеризуется
представительность данных,
т.е. можно ли этим данным верить.
- Помечено в качестве ответа Евгений771 28 августа 2013 г. 17:44
28 августа 2013 г. 17:38 -
Спасибо, очень помогли. А если Max нужен только первых 20 членов, то какая запись будет?
Eugene
- Изменено Евгений771 28 августа 2013 г. 20:29
28 августа 2013 г. 18:20 -
double Max = Collection.Take(20).Max(v=>v.Price);
- Изменено QazRdx 28 августа 2013 г. 20:52
28 августа 2013 г. 20:48 -
CountMaxPrice = MainWindow.CollMax20tick.Select(v => (v.Price == (MinCollTemp + (decimal)i * TickSymbolmin) ) ).Count();
Делаю точку останова на строчку ниже. В коллекции 20 членов и есть с разными ценами, i=0, все типы decimal внутри Select.
Но на выходе CountMaxPrice=20 Почему так получается? Мне нужно Count только избранных членов.
Eugene
- Изменено Евгений771 30 августа 2013 г. 5:26
30 августа 2013 г. 5:22 -
А что такое
CollMax20tick,
MinCollTemp,
i,
TickSymbolmin2 сентября 2013 г. 3:04 -
CollMax20tick-- это текущая коллекция.
MinCollTemp-- минимальная цена в коллекции.
i-- это от цикла перебора от минимальной до максимальной цены с шагом TickSymbolmin.
У меня все получилось не с Select, а с Where. Но любопытно, как вы с Sekect все реализуете.
Eugene
3 сентября 2013 г. 6:54 -
Сорри, очепятка!
Получилось, значит получилось!3 сентября 2013 г. 7:26