Loading...
VesselinTonchev avatar VesselinTonchev 5 Точки

string.Join() не работи

Здравейте, колеги,

Може ли някой да погледне кода и да ми каже как да подкарам string.join(), заощто, каквото и да опитам, както и да го завъртя не иска и не иска.

Задачата е Nikulden's meals от exam preparation - a:
 

using System;
using System.Collections.Generic;
using System.Linq;

namespace Nikulden_s_meals
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> input = Console.ReadLine().Split("-").ToList();

            Dictionary<string, List<string>> guestList
                = new Dictionary<string, List<string>>();
            int counter = 0;
            int countUnlike = 0;
            string command = "";
            string guest = "";
            string meal = "";

            while (input[0] != "Stop")
            {
                command = input[0];
                guest = input[1];
                meal = input[2];

                switch (input[0])
                {
                    case "Like":
                        LikeMeal(guestList, guest, meal);
                        break;
                    case "Unlike":
                        if (guestList.ContainsKey(guest))
                        {
                            if (guestList[guest].Contains(meal))
                            {
                                guestList[guest].Remove(meal);
                                Console.WriteLine($"{guest} doesn't like the {meal}.");
                                countUnlike++;
                            }
                            else
                            {
                                Console.WriteLine($"{guest} doesn't have the " +
                                    $"{meal} in his/her collection.");
                            }
                        }
                        else
                        {
                            Console.WriteLine($"{guest} is not at the party.");                            
                        }
                        break;
                }

                input = Console.ReadLine().Split("-").ToList();
            }
            Output(guestList, counter, ref countUnlike);
        }

        private static void LikeMeal(Dictionary<string, List<string>> guestList, string guest, string meal)
        {
            if (!guestList.ContainsKey(guest))
            {
                guestList.Add(guest, new List<string>());

                if (!guestList[guest].Contains(meal))
                {
                    guestList[guest].Add(meal);
                }
            }
            else
            {
                guestList[guest].Add(meal);
            }
        }

        private static int Output(Dictionary<string, List<string>> guestList, int counter,ref int countUnlike)
        {
            int guestCount = 0;

            foreach (var name in guestList.OrderByDescending(x => x.Value.Count))
            {
                Console.Write($"{name.Key}:");
                guestCount++;

                foreach (var item in name.Value)
                {
                    var result = string.Join(", ", item);
                    Console.Write(result);
                    counter++;

                    //if (counter < name.Value.Count)
                    //{
                    //    Console.Write(", ");
                    //}
                }

                if (guestCount < guestList.Count || name.Value.Count >= 0)
                {
                    Console.WriteLine();
                }
            }
            Console.WriteLine($"Unliked meals: {countUnlike}");

            return counter;
        }
    }
}

 

Тагове:
0
Fundamentals Module
nickwork avatar nickwork 657 Точки

String.join се използва за конктатениране на някаква колекция...в твоя случай ти искаш да конкатинираш просто един единствен стринг и за това не ти работи. Не съм ти тествал кода...но name ти е ключа, name.Value са ти стойностите на този ключ (от листа) и item ти е единична стойност от всичките стойности - в този случай дори не ти трябва стринг.джоин за да я изпишеш. Ако искаш да го използваш този стринг.джоин махни втория фореач и използвай това =>  string.Join(", ", name.Value);

foreach (var name in guestList.OrderByDescending(x => x.Value.Count))
            {
                Console.Write($"{name.Key}:");
                guestCount++;

                foreach (var item in name.Value)
                {
                    var result = string.Join(", ", item);
                    Console.Write(result);
                    counter++;

                    //if (counter < name.Value.Count)
                    //{
                    //    Console.Write(", ");
                    //}
                }

0
SvetoslavPetsev avatar SvetoslavPetsev 100 Точки

Привет,

проблема ти е тук:

едновременно ползваш - foreach (var item in name.Value) и Console.Write(string.Join(", ", item));

Променливата item е от тип string, защото name.Value е List<string>.

когато се опиташ да отпечаташ със string.Join, трябва да зададеш колекция:

Вариант 1:

махаш foreach и директно достъпваш колекцията name.Value:

Console.WriteLine(string.Join(", ", name.Value))

Вариант 2:

Вместо foreach, използваш for , за да хванеш последния елемент при печата, но не ползваш string.Join, а директно печаташ това което има в колекцията т.е. item,

Console.Write($"{item}, ");

За последния елемент печаташ само item /за да не добавиш запетая + space/ с проверка за достигане на последен елемент....

Успех!

0
02/04/2020 15:50:40
VesselinTonchev avatar VesselinTonchev 5 Точки

Разбрах ви. Махнах втория foreach и се получи. Изрежда колекция, а не единичен item:D 

 

Благодаря ви! 

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