我有一个对象列表列表,每个对象都包含一个字符串和一个浮点值。
我需要按字符串值(名称)对这些元素进行分组,并按浮点值的总和对组进行排序。
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。:有没有更聪明的聚合算法来获得这个结果?也许也可以被认为是“关闭”这些值是按列表顺序...
非常感谢
答案 0 :(得分:1)
首先是平面(SelectMany
)列表,然后是GroupBy
按名称和OrderBy
按Sum
的值:
var groups = elements.SelectMany(l => l)
.GroupBy(e => e.Name)
.OrderBy(g => g.Sum(x => x.Value))
答案 1 :(得分:0)
这会为您IEnumerable<Element>
提供一个名称元素和Values
成员中Value
的总和。希望它有所帮助。
elementslist.SelectMany(n => n).GroupBy(n => n.Name).Select(n => new Element(n.First().Name, n.Sum(p => p.Value))).OrderBy(n => n.Value)