Словарь содержит адрес списка вместо значений списка C # - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать программу, в которой есть словарь со словами и их определениями, разделенными ':', и каждое слово, разделенное '|'но по какой-то причине, когда я печатаю значения словаря, вместо этого я получаю System.Collection.Generic.List

Вот возможный ввод: "tackle: оборудование, необходимое для задачи или спорт | code: write code| для компьютерной программы | бит: маленький кусочек, часть или количество чего-либо | снасть: предпринять решительные усилия для решения проблемы | бит: короткое время или расстояние "

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ex1_Dictionary
{
    class Program
    {
        static void Main(string[] args)
        {
            var Input = Console.ReadLine().Split(':', '|').ToArray();
            var Words = new List<string>();
            var Dict = new Dictionary<string, List<string>>();
            for (int i = 0; i < Input.Length; i+=2)
            {
                string word = Input[i];
                string definition = Input[i + 1];
                word = word.TrimStart();
                definition = definition.TrimStart();
                Console.WriteLine(definition);
                if (Dict.ContainsKey(word) == false)
                {
                    Dict.Add(word, new List<string>());
                }
                Dict[word].Add(definition);
            }
            foreach (var item in Dict)
            {
                Console.WriteLine(item);
            }
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Я бы на самом деле ожидал, что результат будет KeyValuePair<string, List<string>>, потому что это то, что вы получаете как item, когда вы итерируете по Dictionary<string, List<string>>, как вы делаете в строке

foreach(var item in Dict)

Вы должныизмените вывод на что-то вроде:

Console.WriteLine(item.Key + ": " + string.Join(", " item.Value)); 
0 голосов
/ 12 декабря 2018

Почему бы не разделить ("|").Тогда, foreach, split (":")?

0 голосов
/ 12 декабря 2018

Прежде всего, вы должны использовать item.Value вместо item для доступа к вашему списку определений.

Вам нужно пройтись по определениям, хранящимся в вашем List<string>:

foreach (var item in Dict)
{
    foreach (var definition in item.Value) 
    {
        Console.WriteLine(definition);
    }
}

Это напечатает строку для каждого определения в ваших списках.Если вы хотите напечатать все определения в одной строке, вы можете сделать следующее:

foreach (var item in Dict)
{
    Console.WriteLine(string.Join(", ", item.Value));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...