C# Linq Group 来自列表的元素并计算值的总和
C# Linq Group elements from list and count sum of values
我有一个对象列表列表,每个对象包含一个字符串和一个浮点值。
我需要按字符串值(名称)对这些元素进行分组,并按浮点值的总和对这些组进行排序。
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) });
p.s.: 有没有更聪明的聚合算法来获得这个结果?也许也可以考虑 "close" 这些值按列表顺序...
非常感谢
首先平整 (SelectMany
) 列表,然后 GroupBy
按名称和 OrderBy
按 Sum
个值:
var groups = elements.SelectMany(l => l)
.GroupBy(e => e.Name)
.OrderBy(g => g.Sum(x => x.Value))
这将为您提供一个 IEnumerable<Element>
,其中一个元素的名称和 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)
- 或按降序排列。
我有一个对象列表列表,每个对象包含一个字符串和一个浮点值。
我需要按字符串值(名称)对这些元素进行分组,并按浮点值的总和对这些组进行排序。
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) });
p.s.: 有没有更聪明的聚合算法来获得这个结果?也许也可以考虑 "close" 这些值按列表顺序...
非常感谢
首先平整 (SelectMany
) 列表,然后 GroupBy
按名称和 OrderBy
按 Sum
个值:
var groups = elements.SelectMany(l => l)
.GroupBy(e => e.Name)
.OrderBy(g => g.Sum(x => x.Value))
这将为您提供一个 IEnumerable<Element>
,其中一个元素的名称和 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)
- 或按降序排列。