我需要知道如何访问和初始化一系列包含其他词典的词典。 例如,如果我有
class Conv{
Dictionary<int, Dictionary<int, Dictionary<int, List<double>>>> valori;
}
我想使用随机数来初始化参数“ valori”,该怎么办? 我会喜欢
valori[n1].Values[n2].Values[n3]
但是在第一个“值”之后,MVS给我一个错误。也许我必须先分配内存?我学到了一些C ++,但是我还是C#的新手 还请让我知道我是否忘记了问题中的重要内容
答案 0 :(得分:3)
使用它们之前,您需要为每个键创建子词典
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];
由于此语法非常笨拙,而且容易出错(如果存在子词典,则忽略数据等),因此我强烈建议更改数据结构或至少将其隐藏在专用类中< / p>
答案 1 :(得分:1)
也许我弄错了,但我想不出你需要这种结构的情况,不过这是我的帮助:
首先,您需要分配变量,否则您将得到错误: “使用未分配的局部变量”。因此代码如下:
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<int, Dictionary<int, List<double>>>()
输入该类型的值。