Софтуерно Инженерство
Loading...
Bebrevski avatar Bebrevski 15 Точки

Dictionaries, Lambda and LINQ

Здравейте,

Колеги, имам нужда от малко разяснение по въпроса, защото срещам трудности при задачите.

Първи въпрос:

Имам речник ( Dictionary<string, Dictionary<string, double>> ), който след въведени данни има вида (стойностите са примерни):

Pesho   |   Sweets   |   0.50

               |    Butter     |   0.60

                                   Sum(1.10)


Gosho   |   Bread   |   0.70

               |   Beer      |   0.90

                                  Sum(1.60)

Как да го сортирам по низходящ ред на сумата от стойностите и самите стойности да са сортирани по низходящ ред, както да показано:

Gosho   |   Beer     |   0.90

               |   Bread   |   0.70

                                  Sum(1.60)


Pesho   |   Butter       |   0.60

               |    Sweets   |   0.50

                                   Sum(1.10)

 

Втори въпрос:

Каква аджеба структура от данни се ползва тук ????

var products = productsList
.OrderByDescending(p => p.Value)
.Take(3)

.Select(p => new KeyValuePair<string, double>(p.Key, p.Value * 0.9));

 

Ще оценя вашата помощ !!

Тагове:
0
Programming Fundamentals
VasilValchanov avatar VasilValchanov 558 Точки

На първия въпрос ->

foreach (var d in dict.OrderByDescending(a => a.Value.Sum(v => v.Value)))
            {
                Console.WriteLine($"{d.Key}");
                foreach (var v in d.Value)
                {
                    Console.WriteLine($"{v.Value}");
                }
            }

На втория въпрос ->

p.Value в случая ти е System.Collections.Generic.Dictionary<string, double> и не може това да го умножиш с 0.9

0
Bebrevski avatar Bebrevski 15 Точки

Вече не знам, кое какво може да прави и затова питам

И все пак нищо не ми се получи. За по-лесно качвам целия код на задачата.

Та има един коментар, под който нямам идея каква структура от данни се използва зад VAR.

А сортирането и принтирането най-долу пак не става. Ако кажеш, че кода не струва, трия и почвам на нова, но просто тая сортировка ми е последната част

https://pastebin.com/UqWHFmkM

Ето и условие (Зад. 4)

https://softuni.bg/trainings/resources/officedocument/16685/exercise-problem-descriptions-programming-fundamentals-extended-may-2017

0
22/08/2017 22:34:11
spzvtbg avatar spzvtbg 581 Точки

KeyValuePair<string, double> || Tuple<string, double> => are read Only!!!

за да направиш намалението можеш просто => .Select(x => x.Value * 0.9)

освен това като променяш речник е хубаво да проверяваш дали има такъв ключ или стоиност 

след ползване на селект която и да е колекция става на IEnumerable<string, <string, double>> - това е общо казано като универсална колекция, като посочиш с мишката върху var ти показва какво е в момента - примерно за вложен речник,

ако искаш само да го фориичнеш и принтираш е ок но ако ще работиш още с него го превръщаш отново в нужната колекция с 

.ТoDictionary(x => x.Key, x => x.Value.ToDictionary(y => y.Key, y => y.Value))

0
22/08/2017 23:02:51
spzvtbg avatar spzvtbg 581 Точки

P.S. - ето тук можеш да разгледаш мои решения ако ти е интересно

0
Bebrevski avatar Bebrevski 15 Точки

Определено ще поразмишлявам над думите ти :)

Нов ми е материала и неща като (   .ТoDictionary(x => x.Key, x => x.Value.ToDictionary(y => y.Key, y => y.Value))   ), ме гръмват отвсякъде.

Мисля да почна задачата нанова, за да осмисля по-добре нещата.

Благодаря за помощта !

0
Bebrevski avatar Bebrevski 15 Точки

Много внимателно ще поразмишлявам над думите ти :)

Нов ми е материала и неща, като ( .ТoDictionary(x => x.Key, x => x.Value.ToDictionary(y => y.Key, y => y.Value))  ), направо ме гръмват отвсякъде.

Трия всичко и почвам отначало, за да мога да осмисля както се случва.

Благодаря !

0