Професионална програма
Loading...
+ Нов въпрос
M.Petrova avatar M.Petrova 11 Точки

Flatten Dictionary ,Lambda and LINQ - Exercises

Здравейте! Ако някой е решавал по подобен начин, моля да сподели опита си...идеята ми е след като си взема необходимите за конкатенация стойности и ги сложа във втория речник, да изтрия всички entry-та със ключ TV, в този случай и да запълня речника с новите стойности - новите два входа TV Lenovo General, TV Samsung Homе. Линк към judge -> https://judge.softuni.bg/Contests/Practice/Index/435#4.  Кодът:   https://pastebin.com/6gQ405bz

0
Fundamentals Module
VasAtanasov avatar VasAtanasov 48 Точки
Best Answer

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

1
25/03/2018 08:47:34
k.sevov avatar k.sevov 1073 Точки

Изтриването става като 51-ви ред го смениш с data[info[1]].Clear(), за да изтриеш само стойностите в речника към конкретния ключ. Сега ще мине нулевите тестове, но 60/100, тъй като накрая при печатането на flattened ги печаташ веднъж всички стойности накрая, а то се очаква да ги печаташ разпределени по ключове (първо flattened за Default, после тези за ТV в примера). Ето ти и едно примерно решение.

0
M.Petrova avatar M.Petrova 11 Точки

Благодаря за съдействието и отделеното време! Изтрих си стойностите на вътрешния с data[info[1]].Clear(), а не с data.Clear(); както недомислено пробвах– съответно така беше изтрил целия data речник.  k.sevov -  какво трябва да коригирам в начина на отпечатване, без да правя някаква проверка дали е "flattened"или не? Или няма да стане такa?

0
25/03/2018 16:18:46
k.sevov avatar k.sevov 1073 Точки

Няма как да стане директно, защото във flattened имаш само вътрешните ключ-стойност, но не знаеш на кой ключ принадлежат (дали е TV или Default примерно), за да можеш да ги изпечаташ към него. Тази информация се губи в момента, в който си изчистиш нестнания речник с Clear, и най-добрият вариант според мен е да си я запазиш в нестната структура за flattened както е в примерното решение, което пуснах. Може и да не ги триеш въобще, но тогава печатането ще се усложни доста с разни проверки и няма смисъл. 

0
M.Petrova avatar M.Petrova 11 Точки

Да, така е след изтриването се губи към кой ключ са стойностите, затова идеята ми беше да само изтрия стойностите, след като си ги взема във втория речник - fldttenedDict, като трия само тях- тези, който тепърва ще "сплескам" и не изтривам основния - външния ключ, през който да минат и останат в data речника новите стойности. Ще ми се да имплементирам това, което VasAtanasov е предложил по-горе - да подменя вложения речник с нов, но не знам как, ....а твоето решение си е категорично решение на проблема ;)

0
25/03/2018 17:25:18
k.sevov avatar k.sevov 1073 Точки

Не съм сигурен, че разбирам какво имаш предвид, тъй като предложението на колегата е еквивалентно на това, което се получава с Clear - просто сменяме речника с нов вместо да изпразним стария от стойности. Това не ни помага да разберем накрая кои стойности от flattened накрая към кой ключ принадлежат. 

Иначе това може да се реши и само с основната структура без въобще да си правим flattened речник, но е една идея по-завъртяно. Идеята е, че можем при команда flatten всички двойки във вътрешния да им сменим ключа на key+value, а за стойност да им дадеш "flattened" примерно. Съответно накрая в цикъла за всеки ключ първо печаташ всички вътрешни, които нямат стойност "flattened", а после тези с нея :) Ако ти се занимава можеш да пробваш да го имплементираш така, ще се сблъскаш с най-различни интересни и неочаквани проблеми, но пък си е добра практика и малко смяна на шаблона на тези задачи за речници.

0
25/03/2018 18:33:44