C# 如何使用LINQ c创建部分填充的深度嵌套字典#
需要创建深度嵌套的字典,该字典部分是空的C# 如何使用LINQ c创建部分填充的深度嵌套字典#,c#,algorithm,linq,dictionary,nested,C#,Algorithm,Linq,Dictionary,Nested,需要创建深度嵌套的字典,该字典部分是空的 IDictionary<string, IDictionary<string, IDictionary<DateTime, double>>> AllparamsSmooth IDictionary所有参数平滑 我有 List<Facility> facilities 列出设施 及 列出名称 需要创建AllParamsMooth,其中仅计算字符串^(仅为名称): 你是这样做的: foreach (
IDictionary<string, IDictionary<string, IDictionary<DateTime, double>>> AllparamsSmooth
IDictionary所有参数平滑
我有
List<Facility> facilities
列出设施
及
列出名称
需要创建AllParamsMooth,其中仅计算字符串^(仅为名称):
你是这样做的:
foreach (var facility in facilities)
{
AllparamsSmooth.Add(facility.Name, new Dictionary<string, IDictionary<DateTime, double>>());
foreach (var name in names)
{
AllparamsSmooth[facility.Name].Add(name, new Dictionary<DateTime, double>());
}
}
foreach(贷款中的var贷款)
{
allparamsmooth.Add(facility.Name,new Dictionary());
foreach(名称中的变量名称)
{
AllparamsSmooth[facility.Name].Add(Name,new Dictionary());
}
}
问题-如何使用LINQ执行此操作非常难看且不可读:
AllparamsSmooth = facilities.ToDictionary(
x => x.Name,
x => (IDictionary<string, IDictionary<DateTime, double>>)names.ToDictionary(
y => y,
y => (IDictionary<DateTime, double>)new Dictionary<DateTime, double>()));
allparamsmooth=facilities.ToDictionary(
x=>x.Name,
x=>(IDictionary)names.ToDictionary(
y=>y,
y=>(IDictionary)新字典());
注意各种必要的类型转换,否则您将得到
IDictionary<string, Dictionary<string, Dictionary<DateTime, double>>>
IDictionary
不管你如何实现它,除非你重新设计,否则它是不可维护的。试着这样做:var results=facility.GroupBy(x=>facility.Name)。ToDictionary(k=>k.Key,v=>v.GroupBy(n=>n.Name)。ToDictionary(x=>x.Key,y=y.date));var maynestdictionary=facilities.GroupBy(x=>x.Name).ToDictionary(k=>k.Key,v=>names.ToDictionary(x=>x,y=>(IDictionary)new Dictionary());尝试了这个,但它返回了一个键值对集合。只有一本字典,而不是三本嵌套的…做到了。非常感谢您的提示!!!!
IDictionary<string, Dictionary<string, Dictionary<DateTime, double>>>