首页 > 解决方案 > 所有嵌套字典都具有相同的值?

问题描述

我正在尝试使用嵌套字典构建此数据结构:

["A",["A",123]],
["B",["B",123]],
["C",["C",123]],

然后遍历数据结构并打印出值。

第一个问题是,所有嵌套字典都是相同的 {"C",123}。我认为这是因为它是同一个对象,但我不知道如何克服这一点。我可以在循环中动态创建新对象吗?

我面临的另一个问题是在我尝试打印出值的循环中。编译器说它不能将 Dictionary 转换为 Dictionary。

using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class Program
    {
        public static void Main()
        {
            List<string> liste = new() { "A", "B", "C" };
 
            Dictionary<string, Dictionary<string, int>> DictOfDicts = new();
            Dictionary<string, int> DictOfData = new();

            foreach (string i in liste)
            {
                DictOfData.Clear();
                DictOfData.Add(i, 123);
                DictOfDicts.Add(i, DictOfData);
            }
            foreach (Dictionary<string, int> i in DictOfDicts)
            {
                Console.WriteLine("Some result");
            }
        }
    }
}

标签: c#

解决方案


您在循环DictOfData之外声明。foreach然后,循环内的所有操作都在同一个对象上完成。因此,您在每次循环迭代中一遍又一遍地清除和填充同一个字典对象。

只需将您的声明移动DictOfData到循环内,您就可以开始了。


奖金

您在问题中显示的整个操作都可以通过以下方式完成:

liste.ToDictionary(x => x, x => new Dictionary<string, int>() { { x, 123 } })

推荐阅读