在 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
我需要知道如何访问和初始化一系列包含其他词典的词典。 例如,如果我有
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