c# – 如何初始化包含字典列表的字典? - 代码日志

c# – 如何初始化包含字典列表的字典?

我开始在C#中进行一些开发,我在这里遇到问题。通常我在python开发中,这样的东西很容易实现(至少对我来说),但是我不知道如何在C#中执行此操作:

我想创建一个包含字典列表的字典,如下所示:使用Generic Collections:

{ "alfred",  [ {"age", 20.0}. {"height_cm", 180.1} ],
  "barbara", [ {"age", 18.5}, {"height_cm", 167.3} ],
  "chris",   [ {"age", 39.0}, {"height_cm", 179.0} ]
}

我从以下开始:

using System.Collections.Generic;
Dictionary<String, Dictionary<String, double>[]> persons;

但是,我想将上面的三条记录一次性插入到人员中。我一直困扰着语法错误。

任何人都有解决方案吗?

编辑:

谢谢大家 – 我没想到在这么短的时间内收到很多很好的答案!你很棒!

您可以使用dictionary initializes.不像Python那么优雅,但可以与

var persons = new Dictionary<string, Dictionary<string, double>>
{
    { "alfred", new Dictionary<string, double> { { "age", 20.0 }, { "height_cm", 180.1 } } },
    { "barbara", new Dictionary<string, double> { { "age", 18.5 }, { "height_cm", 167.3 } } },
    { "chris", new Dictionary<string, double> { { "age", 39.0 }, { "height_cm", 179.0 } } }
};

接着:

persons["alfred"]["age"];

另请注意,您需要Dictionary< string,Dictionary< string,double>>对于此结构而不是Dictionary< string,Dictionary< string,double> []&gt ;.

同样使用这样的结构可能会有一点PITA,损害可读性和编译时类型的安全性。

在.NET中,最好使用强类型对象,如下所示:

public class Person
{
    public double Age { get; set; }
    public string Name { get; set; }
    public double HeightCm { get; set; }
}

接着:

var persons = new[]
{
    new Person { Name = "alfred", Age = 20.0, HeightCm = 180.1 },
    new Person { Name = "barbara", Age = 18.5, HeightCm = 180.1 },
    new Person { Name = "chris", Age = 39.0, HeightCm = 179.0 },
};

然后您可以使用LINQ来获取所需的任何信息:

double barbarasAge = 
    (from p in persons
     where p.Name == "barbara"
     select p.Age).First();

要注意的是,使用集合不会像哈希表查找一样快,但是根据您在性能方面的需求,您也可以这样做。

http://stackoverflow.com/questions/7460702/how-to-initialize-a-dictionary-containing-lists-of-dictionaries

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 如何初始化包含字典列表的字典?