Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ c创建部分填充的深度嵌套字典#_C#_Algorithm_Linq_Dictionary_Nested - Fatal编程技术网

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>>>