【问题标题】:How to create partially populated deeply nested dictionary using LINQ c#如何使用 LINQ c# 创建部分填充的深度嵌套字典
【发布时间】:2023-04-08 15:40:01
【问题描述】:

需要创建部分填充的深度嵌套字典

IDictionary<string, IDictionary<string, IDictionary<DateTime, double>>> AllparamsSmooth

我有

List<Facility> facilities

List<string> names

需要创建 AllparamsSmooth,其中仅填充字符串^(只是名称):

这样做:

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>());
    }
}

问题 - 如何用 LINQ 做到这一点

【问题讨论】:

  • 无论你如何实现它,除非你重新设计,否则它是不可维护的。
  • 试试这样的: 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 mayNestdictinoary =facilities.GroupBy(x => x.Name).ToDictionary(k => k.Key, v => names.ToDictionary(x => x, y => (IDictionary)new Dictionary()));
  • 试过了,但它返回给我一个键值对的集合。只有一个字典而不是三个嵌套的....
  • 做到了。非常感谢您的提示!!!!

标签: c# algorithm linq dictionary nested


【解决方案1】:

相当丑陋且难以阅读:

AllparamsSmooth = facilities.ToDictionary(
    x => x.Name,
    x => (IDictionary<string, IDictionary<DateTime, double>>)names.ToDictionary(
        y => y,
        y => (IDictionary<DateTime, double>)new Dictionary<DateTime, double>()));

注意各种必要的演员表,否则你会得到一个

IDictionary<string, Dictionary<string, Dictionary<DateTime, double>>>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多