【问题标题】:List containing Dictionary Containing List包含字典的列表
【发布时间】:2012-03-08 12:36:52
【问题描述】:

问题

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

List<Dictionary<string, List<int>>> data = 
new List<Dictionary<string, List<int>>>(5);

当我执行 Data[0] 时,我收到一个错误,指出索引超出范围..

谁能指出我如何做到这一点。还是我做错了什么?

附录:

->我想做什么

我基本上是在创建一个数据结构来保存当月的计划。 所以每个包含 5 周的列表-> 活动字典,其中每个活动的值是 -> 由 7 个整数组成的列表,表示一周中每天花在该活动上的小时数。

我知道我需要添加空白条目。 附加问题是这样的。

->查询

现在我必须在列表中添加 5 个空白字典。 以及字典的每个 Key 中的 7 个整数列表(初始化为零),表示每天消耗的时间。

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

类似的语句

Vector<int> *vec = new Vector<int>(5,0);

用 5 个条目初始化 vec,每个条目为 0。我可以在 c# 中做同样的事情吗?

感谢您的帮助。

【问题讨论】:

    标签: c# list data-structures dictionary


    【解决方案1】:

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

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

    List&lt;T&gt;(int) 构造函数创建一个具有给定 容量 的列表(即支持它的数组的初始大小为 5,假设它不认为它太小而无用) .它的 size 仍然为 0。

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

    编辑:没有构造函数可以用给定的一组值“填充”列表。使用 LINQ,您可以编写:

    List<string> list = Enumerable.Repeat("foo", 5).ToList();
    

    ...但您不会希望为您的字典之一这样做,否则您最终会得到 5 次对同一字典的引用。你可以使用:

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

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

    我个人可能只是创建列表并用for循环填充它......

    【讨论】:

    • 谢谢,你能帮我解决帖子中编辑的添加查询吗?我知道这可能是不可能的,为什么 c# 没有提供这个功能呢?有什么见解吗? :)
    • @KshitijBanerjee:C# 是一种语言。您真的在问为什么 BCL 不提供此功能。将编辑。
    • 是的,我现在已经完成了 for 循环。只是一个好奇的想法。感谢您的帮助。
    【解决方案2】:

    您已将 List 初始化为默认大小 5,但该列表仍为空,因此当您尝试访问数据对象中的索引 0 时,它超出了范围,因为当前列表中的项目数量为 0,因此没有可访问的对象。

    如果您向数据添加新项目,使用 data.Add(...) 您可以使用 data[0] 访问第一个索引处的对象

    【讨论】:

    • “默认大小”在这里使用是一个令人困惑的术语。 size 仍为 0; 容量是5。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2018-09-13
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多