【问题标题】:C# Linq Group elements from list and count sum of valuesC# Linq Group 列表中的元素并计算值的总和
【发布时间】:2017-03-22 06:25:54
【问题描述】:

我有一个对象列表列表,每个对象都包含一个字符串和一个浮点值。

我需要按字符串值(名称)对这些元素进行分组,并按浮点值的总和对这些组进行排序。

 public class Element
    {

        public string Name;
        public float Value;

        public Element(string name,float value) {

            Name = name;
            Value = value;

        }

    }


    List<List<Element>> elementslist = new List<List<Element>>();

    elementslist.Add(new List<Element>() { new Element("Apple", 1.2f), new Element("Banana", 0) });
    elementslist.Add(new List<Element>() { new Element("Apple", 2.1f), new Element("Banana", 1.4f) });
    elementslist.Add(new List<Element>() { new Element("Apple", 0), new Element("Banana", 0) });

ps:有没有更智能的聚合算法来获得这个结果?也许也可以考虑“关闭”这些值按列表顺序...

非常感谢

【问题讨论】:

    标签: c# linq list sum aggregation


    【解决方案1】:

    首先平 (SelectMany) 列表,然后是 GroupBy 按名称和 OrderBySum 的值:

    var groups = elements.SelectMany(l => l)
                         .GroupBy(e => e.Name)
                         .OrderBy(g => g.Sum(x => x.Value))
    

    【讨论】:

    • 还不如为输出添加一个.Select(x =&gt; new { Name = g.Key, Sum = g.Sum(y =&gt; y.Value) })
    • @clarkitect:是的,我想是的,但从问题中并不清楚,因为它说它想订购我在组中留下的组。
    • 谢谢,我需要一些关于 sum 的语法 :) -clarkitect 谢谢你的插件 -Arturo,你是对的 abot 分组,然后如何访问可枚举以获得第二个结果?
    • @MirkoArcese:欢迎您,如果答案对您有帮助,请认为它已被接受。
    • 当然是一个有效的答案,如何读取这个有序列表中一个元素的名称和值?需要演员表吗?
    【解决方案2】:

    这将为您提供一个 IEnumerable&lt;Element&gt;,其中包含一个元素的名称和 Value 成员中的 Values 的总和。希望对您有所帮助。

    elementslist.SelectMany(n => n).GroupBy(n => n.Name).Select(n => new Element(n.First().Name, n.Sum(p => p.Value))).OrderBy(n => n.Value)
    
    • 或 OrderByDescending。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2019-02-14
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多