在 C# 中初始化嵌套字典

Initialize Nested Dictionaries in c#

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

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

而且我想用随机数初始化参数"valori",怎么办? 我会这样做

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

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

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

首先你需要给变量赋值,否则会报错: "Use of unassign local variable"。所以代码将是这样的:

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>>>());

"notice that keys are different"

而不是 new Dictionary<int, Dictionary<int, List<double>>>() 你应该 输入该类型的值。

您需要在使用前为每个键创建子词典

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];

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