我开始在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} ]
}
Run Code Online (Sandbox Code Playgroud)
我从以下开始:
using System.Collections.Generic;
Dictionary<String, Dictionary<String, double>[]> persons;
Run Code Online (Sandbox Code Playgroud)
但是我想立刻将上面的三个记录插入到人物中.我一直都遇到语法错误.
有人为我解决了吗?
编辑:
谢谢大家 - 我没想到会在如此短的时间内收到如此多的深思熟虑的答案!你很棒!
Dar*_*rov 47
你可以使用字典初始化.不像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 } } }
};
Run Code Online (Sandbox Code Playgroud)
然后:
persons["alfred"]["age"];
Run Code Online (Sandbox Code Playgroud)
另请注意,您需要Dictionary<string, Dictionary<string, double>>
此结构而不是Dictionary<string, Dictionary<string, double>[]>
.
使用这种结构也可能是一点点PITA和危害可读性以及代码的编译时类型安全性.
在.NET中,最好使用强类型对象,如下所示:
public class Person
{
public double Age { get; set; }
public string Name { get; set; }
public double HeightCm { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后:
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 },
};
Run Code Online (Sandbox Code Playgroud)
然后你可以使用LINQ来获取你需要的任何信息:
double barbarasAge =
(from p in persons
where p.Name == "barbara"
select p.Age).First();
Run Code Online (Sandbox Code Playgroud)
需要注意的是,使用集合不会像哈希表查找那样快,但根据您在性能方面的需求,您也可以使用它.