Loading...
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Задача - Book Library

За задачата Book Library ми трябва сумиране на крайния резултат. Това е кодът ми за момента.
Нагледно, резултатът, който получавам с примерния вход е:


Tolkien -> 30.00
Tolkien -> 10.25
JKRowling -> 15.50
JKRowling -> 20.00
OBowden -> 14.00

Това, което ми трябва, е сумиране по име на автор:

Tolkien -> 40.25
JKRowling -> 35.50
OBowden -> 14.00

 

 

Тагове:
0
Programming Fundamentals 15/10/2016 19:12:12
Kiril98 avatar Kiril98 66 Точки
Best Answer

Успях да го направя използвайки anonymous тип.

var filteredBooks = myLibrary.books.
                Select(b => new
                {
                    Author = b.author,
                    EarningsTotal = myLibrary.books
                        .Where(b1 => b1.author.Equals(b.author))
                        .Sum(b1 => b1.price)
                })
                .Distinct()
                .OrderByDescending(b => b.EarningsTotal)
                .ThenBy(b => b.Author)
                .ToList();
            foreach (var book in filteredBooks)
            {
                Console.WriteLine("{0:f2} -> {1:f2}", book.Author, book.EarningsTotal);
            }

 

2
Kiril98 avatar Kiril98 66 Точки

Да аз го направих с твоят код и го пуснах в джъдж преди тук и дава 100/100 :). Select заявките са много мощно оръжие, ако се научиш как да ги ползваш.

0
12/09/2016 16:40:53
YordanDringov avatar YordanDringov 26 Точки

http://pastebin.com/HyneRH0p - Това е моят код по задачата, като ми остава само да ги сортирам по price и authors. Не знам къде точно да поставя OrderByDescending() и ThenBy(). Ще се радвам за малко съдействие.

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Благодаря, но за съжаление не ми върши работа. Подходът ти е различен, а на мен ми трябва само сумиране по автор.

0
VladimirAnaniev avatar VladimirAnaniev 54 Точки

Можеш да използваш Dictionary в което да пазиш авторите и цените на книгите им.

След като имаш този резултат правиш един foreach и ако автора го има вече просто добавяш цената.

Надявам се да съм ти помогнал.

0
12/09/2016 15:45:09
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Опитвам се да го направя без Dictionary и да ползвам следния hint:
"Create a LINQ query that will sum the prices by author, order the results as requested."

0
jabalka avatar jabalka 960 Точки

Здравей.

Освен да работи добре, кодът на задачата трябва и да е добре подреден. Колкото по-рано си създадем навици да подреждаме кода - толкова по-добре.

Защо да го подреждаме и да спазваме конвенции? Защото рано или късно ще работим в екип и трябва освен компютъра и колегите да разбират как работи кодът ни и да се ориентират бързо в него.

Препоръчвам ти:

-> да изнасяш класовете в отделни файлове (class Book, class Library)

-> между пропъртитата да оставяш по един празен ред (на пример в class Book между Title, Author и т.н.)

-> пропъртитата трябва да са именовани с PascalCase (не title, а Title и т.н.)

Желая успех ;)

 

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Здравей,

Третата препоръка е интересна. Погледнах в C# Coding Standards and Naming Conventions и наистина пише следното:


- "do use PascalCasing for class names and method names."

- "do use camelCasing for method arguments and local variables."


Само за нагледност и по-лесно ориентиране на други хора в собствения ни код ли се прави? Предполагам зад празните редове между пропъртътита на класовете стои същата логика.
Изнасянето на класовете в отделни файлове не го правя, защото не подавам файлове към Judge и ми е по-лесно да копирам информацията от един файл.

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

Поздрави!

 

0
jabalka avatar jabalka 960 Точки

Това са просто общоприети конвенции за качестен код в контекста на езика. Колкото по-рано си създадем навик да ги ползваме - по-добре.
Защо да го правим? 

Other than that - писането на качествен код е въпрос на личен избор :)

Още една закачка (много добронамерена):

"Всъщност, за момента не наблягам на обекти и класове, тъй като, доколкото разбрах, задачите от изпита по Programming Fundamentals ще се решават и без тях, и вероятно с писане на по-малко код"

Ти защо учиш? За изпита или за да работиш това после ;) Или защото ти е интересно или.... друго ;)

Ако отговорът не е първото (да учиш, за да вземеш изпита), а имаш по-голяма цел, съветвам те да гледаш отвъд това, което се иска от теб и да гледаш да доставяш повече, да търсиш повече, да четеш повече.

 

Желая ти от сърце успех :)

1
18/10/2016 17:22:18
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Това е въпрос на приоритети. Моята краткосрочна цел е да си взема изпита, а дългосрочната такава е да стана програмист. :)
След изпита ще мисля различно, а до него няма много време. ;)

 

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