Loading...
Taniaaleksandrova avatar Taniaaleksandrova 6 Точки

2. Word Synonyms, C#, Lab: Associative Arrays

Здравейте, моля за малко помощ за задачата 2. Word Synonyms, гърми ми 4 тест, ще съм благодарна, ако някой ми отговори

Линк към кода ми - https://pastebin.com/qywCPj6i

Условие

Write a program, which keeps a dictionary with synonyms. The key of the dictionary will be the word. The value will be a list of all the synonyms of that word. You will be given a number n – the count of the words. After each word, you will be given a synonym, so the count of lines you have to read from the console is 2 * n. You will be receiving a word and a synonym each on a separate line like this:

  • {word}
  • {synonym}

If you get the same word twice, just add the new synonym to the list.

Print the words in the following format:

{word} - {synonym1, synonym2… synonymN}

Примери

Input

Output

3

cute

adorable

cute

charming

smart

clever

cute - adorable, charming

smart - clever

2

task

problem

task

assignment

task – problem, assignment

Тагове:
0
Fundamentals Module
MartinBG avatar MartinBG 4803 Точки

Проблемът е тук:

            string key = string.Empty;
 
            for (int i = 1; i <= 2 * n; i++)
            {
                string input = Console.ReadLine();
                if (i % 2 != 0)
                {
                        if(!(counts.ContainsKey(input)))
                        {
                            counts.Add(input, new List<string>());
                            key = input; //WRONG - updates ONLY for new keys
                        }
                }
                else
                {
                    counts[key].Add(input);
                }
            }

key ще бъде ъпдейтнат само ако ключът е нов, в противен случай ще ползва последния ключ за новата стойност.

Например при вход:

3
cute
adorable
smart
clever
cute
charming

Ще изведе грешен резултат:

cute - adorable
smart - clever, charming

 

Решението е да се изнесе ъпдейта на key извън проверката за нов ключ:

            string key = string.Empty;
 
            for (int i = 1; i <= 2 * n; i++)
            {
                string input = Console.ReadLine();
                if (i % 2 != 0)
                {
                        key = input; // key updates regardless of its presence in counts

                        if(!(counts.ContainsKey(input)))
                        {
                            counts.Add(input, new List<string>());
                        }
                }
                else
                {
                    counts[key].Add(input);
                }
            }

 

0
07/07/2020 21:24:01
Taniaaleksandrova avatar Taniaaleksandrova 6 Точки

Благодаря много за отговора, помогна ми много и се справих!

1
Iv_Konov avatar Iv_Konov 383 Точки

Здравей, Taniaaleksandrova,

 

Вече имаш добър отговор от @MartinBG. Аз пък ти добавям малко различно решение... 

 

===

            int inputs = int.Parse(Console.ReadLine());
            var dict = new Dictionary<string, List<string>>();

            for (int i = 0; i < inputs; i++)
            {
                string key = Console.ReadLine(); // !!!
                string value = Console.ReadLine(); // !!!

                if (!dict.ContainsKey(key))
                {
                    dict.Add(key, new List<string>());
                }

                dict[key].Add(value);
            }

            foreach (var kvp in dict)
            {
                Console.WriteLine($"{kvp.Key} - {string.Join(", ", kvp.Value)}");
            }

===

 

Поздрави,

Иван

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