Софтуерно Инженерство
Loading...
+ Нов въпрос
warglaivee avatar warglaivee 59 Точки

02.Dict-Ref Advanced/Advanced Collections

Здравейте, написах решение на въпросната задача, но последните два теста не минават, пренаписах я и мина, но не виждам къде е проблема в този код, ако може някой от екипа да ми предостави последните 2 теста от Judge, за да видя какво не е наред или някой, които намира проблема да сподели къде е, благодаря!

Judge: https://judge.softuni.bg/Contests/Practice/Index/433#1


Условие: http://imgur.com/a/UfgFV

Код: 

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

namespace _02.Dict_Ref_Advanced
{
    public class Program
    {
        public static void Main()
        {
            var result = new Dictionary<string, List<string>>();
            var input = Console.ReadLine();
            while (input != "end")
            {
                var inputParams = input
                    .Split(new char[] { ' ', '-', '>', ',' }
                    , StringSplitOptions.RemoveEmptyEntries)
                    .ToList();
                var name = inputParams[0];
                var intValues = inputParams.Skip(1).ToList();
                var number = -1;
                var anotherKey = string.Empty;

                foreach (var intValue in intValues)
                {
                    var isInt = int.TryParse(intValue, out number); //if value is given
                    var numToStr = string.Empty;

                    if (isInt)
                    {
                        if (!result.ContainsKey(name)) //save all names as keys
                        {
                            result[name] = new List<string>();
                        }
                        numToStr = number.ToString();
                        result[name].Add(numToStr);
                    }
                    else //if another key is given
                    {
                        var secondKey = intValues[0];
                        if (result.ContainsKey(secondKey)) //if second key dosent exist
                        {
                            if (!result.ContainsKey(name)) //save all names as keys
                            {
                                result[name] = new List<string>();
                            }
                            result[name] = result[secondKey]; // add value to second key
                        }
                    }
                }
                input = Console.ReadLine();
            }
            foreach (var item in result)
            {
                Console.WriteLine($"{item.Key} === {string.Join(", ", item.Value)}");
            }
        }
    }
}

 

Тагове:
0
C# Fundamentals 30/05/2017 21:28:06
warglaivee:
Обяснение получено.
dimitar9111 avatar dimitar9111 53 Точки
Best Answer

Ами ето така става:

result[name] = result[secondKey]; // add value to second key

го сменяш със:

result[name] = new List<string>(result[secondKey]); // add value to second key

проблема е че листа  е референтен тип данни и

променяйки стойността на единия речник(листа) променяш и тази на другия.

тук добре го е обяснил Иво(към края на видеото беше):

https://softuni.bg/trainings/resources/video/13215/video-screen-07-march-2017-ivaylo-jelev-programming-fundamentals-exended-january-2017

0
31/05/2017 00:37:51
warglaivee avatar warglaivee 59 Точки

Благодаря! Помогна ми наистина.

0