将列表中的元素分类到具有平均值的另一个分类



假设我们有这样一个类:

public enum KindOfPerson
{
    Student, Teacher, ...
}
public class Person
{
    // This contains only numbers between 0 and 1
    public double ScorePercent { get; set; }
    public KindOfPerson Type { get; set; }
}

我正在尝试按KindOfPerson对列表进行分类,但我也想知道相同KindOfPerson的所有人的ScorePercent的平均值是多少。

List<List<Person>> groupedLists = peopleList.GroupBy(person => person.Type)
                                                      .OrderBy(group => group.Key)
                                                      .Select(group => group.ToList())
                                                      .ToList();

你想用LINQ来做吗?
您可以使用GroupByAverage方法。

var groupedLists = peopleList.GroupBy(person => person.Type)
                             .OrderBy(group => group.Key)
                             .Select(group => new {
                                 People = group.ToList(),
                                 AverageScore = group.Average(p => p.ScorePercent)
                              })
                              .ToList();

更新

假设你想要一个Tuple<KindOfPerson, double>的列表,在这里:

var scores = peopleList.GroupBy(p => p.Type)
                       .Select(g => Tuple.Create(g.Key, g.Average(p => p.ScorePercent)))
                       .ToList();

创建Dictionary<KindOfPerson, double>非常类似:

var scores = peopleList.GroupBy(p => p.Type)
                       .ToDictionary(g => g.Key, g => g.Average(p => p.ScorePercent));

最新更新