【问题标题】:need get unique set of keys from Multiple dictionaries<Datetime,double>需要从多个字典<Datetime,double> 中获取唯一的一组键
【发布时间】:2012-09-05 20:51:56
【问题描述】:

我有 20 部 &lt;Datetime,double&gt; 的字典,它们大多用于相同的日期范围(例如 2012 年 2 月 24 日至 2012 年 6 月 4 日)。有些词典有额外的天数,有些则缺少天数。我想要一个包含所有正在使用的唯一日期的数组。

目前我正在遍历所有键并添加到哈希集以获取唯一集,然后将哈希集转换为数组。有没有更有效的方法?

作为记录,我还考虑迭代并使用字典的 containsKey 函数并添加到列表或 LINQ。我现有的流程似乎可以解决问题。

【问题讨论】:

标签: c# linq dictionary contains hashset


【解决方案1】:

您描述的代码是您可以获得的最有效的代码。
您可以使用 LINQ 以更少的代码(和类似的效率)来完成:

dicts.SelectMany(d => d.Keys).Distinct().ToArray();

【讨论】:

    【解决方案2】:

    您可以将所有字典拉到允许“重复键”的列表中,然后使用 Distinct 功能:

            Dictionary<DateTime, double> dic = new Dictionary<DateTime, double>()
            {
                {DateTime.Now, 111}
            };
    
            Dictionary<DateTime, double> dic2 = new Dictionary<DateTime, double>()
            {
                {DateTime.Now, 111}
            };
    
            var list = dic.ToList();
            list.AddRange(dic2.ToList());
    
            var final = list.Distinct().ToDictionary(x => x.Key, x => x.Value);
    

    【讨论】:

      【解决方案3】:

      我在寻找稍微不同的问题的解决方案时发现了这篇文章,但使用公认的答案作为我的解决方案的基础,所以我认为有同样问题的人也可能会走这条路。

      我正在寻找一种方法来在一组对象中找到单个属性,该属性在每个对象的属性集中都是唯一的。我在字典中有属性名称,我想要一个只出现在一个字典中的键列表。

      这是我的解决方案,您应该可以将其粘贴到 linqpad 中以查看它是否正常工作。

      void Main()
      {
        var d = new Dictionary<string, Dictionary<string, string>>
              {
                  {
                      "First",
                      new Dictionary<string, string>
                      {
                          {"A", "ash"},
                          {"B", "brett"},
                          {"R", "ripley"},
                          {"J", "jones"},
                          {"D", "dallas"}
                      }
                  },
                  {
                      "Second",
                      new Dictionary<string, string>
                      {
                          {"A", "ash"},
                          {"B", "brett"},
                          {"R", "ripley"},
                          {"D", "dallas"},
                          {"K", "kane"}
                      }
                  },
                  {
                      "Third",
                      new Dictionary<string, string>
                      {
                          {"A", "ash"},
                          {"B", "brett"},
                          {"R", "ripley"},
                          {"D", "dallas"},
                          {"V", "vasquez"}
                      }
                  },
                  {
                      "Fourth",
                      new Dictionary<string, string>
                      {
                          {"A", "ash"},
                          {"B", "brett"},
                          {"R", "ripley"},
                          {"D", "dallas"},
                          {"H", "hicks"}
                      }
                  }
              };
      
      var u = d.Values.SelectMany(x => x.Keys).Distinct().Where(y => d.Values.SelectMany(z => z.Keys).Count(a => a == y) == 1).ToArray();
      
              foreach (var f in u)
              {
                  Console.WriteLine("{0} => {1}", f, d.Keys.Single(s => ((Dictionary<string, string>)d[s]).ContainsKey(f)));
              }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多