包含Dictionary Containing List的列表

Ksh*_*jee 1 c# dictionary list data-structures

我在C#中需要一个像上面这样的数据结构但是我在访问内容时遇到了问题,我看到我可以用C++做到这一点在c#中是如何完成的?

List<Dictionary<string, List<int>>> data = 
new List<Dictionary<string, List<int>>>(5);
Run Code Online (Sandbox Code Playgroud)

当我做数据[0]我得到一个错误说明索引越界..

任何人都可以指出我如何做到这一点.或者我做错了什么?

附录:

- > 我想做什么

我基本上创建了一个数据结构,保留了一个月的计划.因此,每个5周的列表包含 - >活动词典,其中每个活动的值是 - > 7个整数的列表,表示每周每天花在该活动上的小时数.

我有我需要添加空白条目.附加问题是这样的.

- > 查询

现在我将不得不在列表中添加5个空白词典.以及表示每天消耗时间的字典的每个键中的7个整数(初始化为零)的列表.

有没有办法初始化列表中的5个空白词典,并且内部相同,而无需手动创建新词典并添加它们.使用c ++我相信你可以做到这一点甚至输入你想要初始化每个条目的值,所以..

像这样的陈述

Vector<int> *vec = new Vector<int>(5,0);
Run Code Online (Sandbox Code Playgroud)

初始化vec有5个条目,每个条目为0.我可以在c#中执行相同的操作吗?

谢谢您的帮助.

Jon*_*eet 11

这与列表是复杂类型无关.你会得到同样的东西:

List<string> list = new List<string>(5);
string x = list[0]; // This will fail too
Run Code Online (Sandbox Code Playgroud)

List<T>(int)构造函数使用给定一个列表容量(即阵列支持,将有5初始大小,假设它并不能决定这只是太小,是有用的).它的大小仍为0.

您仍然需要先将元素添加到列表中,然后才能访问它们.

编辑:没有构造函数来"填充"具有给定值集的列表.使用LINQ,你可以写:

List<string> list = Enumerable.Repeat("foo", 5).ToList();
Run Code Online (Sandbox Code Playgroud)

...但你不会想这样做对你的字典之一,否则你会用5个引用相同的词典结束.你可以使用:

var list = Enumerable.Range(0, 5)
                     .Select(x => new Dictionary<string, List<int>>())
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,这里的每个字典都是空的.

就个人而言,我可能只是创建列表并填充for循环虽然...