字典包含列表地址而不是列表值C#

时间:2018-12-12 16:34:25

标签: c# list dictionary for-loop

我正在尝试制作一个包含字典的程序,该字典的单词及其定义用':'分隔,每个单词用'|'分隔但是由于某些原因,当我打印字典的值时,却得到了System.Collection.Generic.List

可能输入以下内容:“处理:一项任务或一项运动所需的设备|代码:为计算机程序编写代码|位:一小部分,一部分或数量的物品|解决:做出坚定的努力来应对有问题|位:很短的时间或距离”

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 :(得分:5)

我实际上希望输出为KeyValuePair<string, List<string>>,因为当您像在行中那样遍历item时,您将得到的是Dictionary<string, List<string>>

foreach(var item in Dict)

您应该将输出更改为:

Console.WriteLine(item.Key + ": " + string.Join(", " item.Value)); 

答案 1 :(得分:1)

首先,您必须使用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));
}

答案 2 :(得分:0)

为什么不拆分(“ |”)。然后,foreach,split(“:”)?