【问题标题】:C# Linq Sum query on IDictionaryC# Linq Sum 查询 IDictionary
【发布时间】:2011-04-27 07:22:16
【问题描述】:

我有一个 IDictionary<string,int> 包含一个不同的类别列表和相应的计数,数据看起来像这样:

类别 |数数 ------------------ 一个 | 2 乙| 2 Z | 2 A_B | 1 A_B_C | 5

我正在寻找一个查询以普通字母/字符串开头的类别计数相加,因此从上面我要查找的结果如下:

类别 |数数 ------------------ 一个 | 8

【问题讨论】:

    标签: c# linq


    【解决方案1】:
    var d = new Dictionary<string, int>()
    {
        { "A", 2 },
        { "B", 2 },
        { "Z", 2 },
        { "A_B", 1 },
        { "A_B_C", 5 },
    };
    
    var d2 = d.Select(kvp => new KeyValuePair<string, int>(
                    kvp.Key,
                    d.Where(k => k.Key.StartsWith(kvp.Key))
                     .Sum(k => k.Value)))
              .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
    

    【讨论】:

    • 您还必须在转换中指定值。否则你会得到一个Dictionary&lt;string, KeyValuePair&lt;string, int&gt;&gt;
    【解决方案2】:
    Dictionary<string, int> data = new Dictionary<string,int>();
    
    data.Add("A", 2);
    data.Add("B", 2);
    data.Add("Z", 2);
    data.Add("A_B", 1);
    data.Add("A_B_C", 5);
    
    data.Dump();
    
        var result = from d in data
                     select new {Key = d.Key, Sum = (from dt in data where dt.Key.StartsWith(d.Key) select dt).Sum(x=>x.Value)};
    
    result.Dump();
    

    Linqpad 代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 2018-06-17
      • 2012-08-28
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      相关资源
      最近更新 更多