Loading...
vani4ka66 avatar vani4ka66 24 Точки

Royal Accounting - C# - Проблем със задачата

Моля, някой ако може да погледне кода на тази задача, гърми ми сортирането, и не разбирам защо. Постоянно ми хвърля ексепшън - 

Unhandled Exception: System.ArgumentException: At least one object must implement IComparable.
   at System.Collections.Comparer.Compare(Object a, Object b)
   at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2)
   at System.Linq.EnumerableSorter`1.QuickSort(Int32[] map, Int32 left, Int32 right)
   at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext()
   at iuni14.Program.Main(String[] args)

Ето го моето решение - 

https://github.com/vani4ka66/GUnit/blob/master/Royal%20Accounting%20-

Тагове:
0
C# Advanced
Filkolev avatar Filkolev 4482 Точки

Имаш ли информация на кой ред точно се получава?

Оплаква се, че опитваш да сортираш нещо, което не може да се сравни, но по кода не мога да се ориентирам. Примерно: var sortedMap = map.OrderByDescending(x => x.Value.Values.Select(y => y.Values.Select(z=> z))); ми е доста криптично.

Мисля, че опитваш да сравняваш масиви. x.Value е сортиран речник, Values е колекция от всичките стойности, които са речници. От тази колекция от речници проектираш техните стойности, които са double. Т.е. струва ми се, че за всяко х ти взимаш колекция от числа, което не може да се ползва за сравнение/сортиране. Трябва на всяко х да отговаря конкретна стойност, която е сравнима, примерно число, стринг, или нещо друго, което имплементира IComparable.

1
vani4ka66 avatar vani4ka66 24 Точки

Ами като поставя мишката на последните скоби, където е z, ми изписва точно double. Аз го тълкувам, че сравнявам последните числа в последното дикшънари. Вече тотално се обърках, защото това работеше в предни задачи, а в тази не става. Погледни тогава това:

Dictionary<string, SortedDictionary<string, Dictionary<int, double>>> map = new Dictionary<string, SortedDictionary<string, Dictionary<int, double>>>();

Как да сортирам този речник по последното - по double?

0
Filkolev avatar Filkolev 4482 Точки

z dействително е double, но ти работиш върху колекция, взимаш много числа тип double.

Как точно искаш да сортираш този речник? Какъв критерий искаш да вземеш?

1
vani4ka66 avatar vani4ka66 24 Точки

Да, всъщност, по сумата трябва. Ок, правя го така, но пак гърми - 

 var sortedMap = map.OrderByDescending(x => x.Value.Values.Select(y => y.Values.Select(z => z).Sum()));
 

На следващото сортиране програмата пак гърми, понеже му давам 

 var sortedNames = pair.Value.OrderByDescending(x => x.Value.Select(y => y.Key)).ThenBy(x => x.Value.Select(b => b.Value));

Тук искам да сортира   SortedDictionary<string, Dictionary<int, double>> , като първо int да са Descending, после double пак Descending. 

 

0
14/06/2016 13:22:31
Ivailo_Kodov avatar Ivailo_Kodov 97 Точки

Бих искал да помоля,ако някой има решение за 100 точки на тази задача, да го сподели :) 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.