【问题标题】:Initialize Nested Dictionaries in c#在 C# 中初始化嵌套字典
【发布时间】:2019-08-17 10:46:09
【问题描述】:

我需要知道如何访问和初始化一系列包含其他字典的字典。 例如,如果我有

class Conv{
    Dictionary<int, Dictionary<int, Dictionary<int, List<double>>>> valori;
}

我想用随机数启动参数“valori”,我该怎么做? 我会这样做

valori[n1].Values[n2].Values[n3]

但是在第一个“值”之后,MVS 给了我一个错误。也许我必须先分配内存?我学了一点c++,但我还是c#新手 如果我忘记了问题中的重要内容,也请告诉我

【问题讨论】:

    标签: c# list dictionary visual-studio-2017 list-initialization


    【解决方案1】:

    在使用它们之前,您需要为每个键创建子字典

    var list = new List<double> {d};
    var d1 = new Dictionary<int, List<double>> {{n3, list }};
    var d2 = new Dictionary<int, Dictionary<int, List<double>>> {{n2, d1}};
    valori[n1] = d2;
    

    你也可以用一行来写这个简短的:

    valori[n1] = new Dictionary<int, Dictionary<int, List<double>>> {{n2, new Dictionary<int, List<double>> {{n3, new List<double> {d}}}}};
    

    当所有的字典都被实际创建后,你就可以正常访问它们了:

     var savedList = valori[n1][n2][n3];
    

    由于这种语法非常笨拙并且很容易出错(如果存在子字典,则丢失,覆盖数据等),我强烈建议更改数据结构或至少将其隐藏在专用类中

    【讨论】:

    • 谢谢!如果你有时间,我发布了另一个问题:D
    【解决方案2】:

    也许我弄错了,但我想不出你需要这种结构的情况,但这是我的帮助:

    首先你需要分配变量,否则你会得到错误: “使用未分配的局部变量”。所以代码将是这样的:

    Dictionary<int, Dictionary<int, Dictionary<int, List<double>>>> valori=new 
    Dictionary<int, Dictionary<int, Dictionary<int, List<double>>>>();
    

    其次,您需要将一些数据添加到字典中以便以后使用它 你应该这样做:

    valori.Add(2, new Dictionary<int, Dictionary<int, List<double>>>());
    valori.Add(3, new Dictionary<int, Dictionary<int, List<double>>>());
    valori.Add(4, new Dictionary<int, Dictionary<int, List<double>>>());
    

    “注意键不一样”

    你应该代替new Dictionary&lt;int, Dictionary&lt;int, List&lt;double&gt;&gt;&gt;() 输入该类型的值。

    【讨论】:

    • 感谢您的帮助。如您所知,我必须反序列化一个 Json 文件,该文件类似于 frame>> 的列表。然后,我想在一个类中传递它的值 persona>>
    • 另外,我刚刚发了一个关于Json的序列化和反序列化的问题,如果你想看看! :)
    猜你喜欢
    • 2013-03-27
    • 2023-03-30
    • 2011-02-17
    • 1970-01-01
    • 2017-05-18
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多