首页 > 解决方案 > 如何在使用 Linq 的 C# 中删除列表中的重复项,同时保留重复项中得分最高的元素

问题描述

考虑以下类的列表:

class A
{
    string Id;
    string FamilyId
    int Score
}

我想处理列表,以便将具有重复 FamilyId 字段的元素减少为列表中的单个实例;消除重复时,最高分是我想保留的那个。

例如,如果我有以下元素:

>

身份证、家庭、分数

1, A, 0

2,乙,2

3、乙、3

最终名单应该是:

身份证、家庭、分数

1, A, 0

3、乙、3

我考虑过按家庭对 bin 中的列表进行排序,然后只保留每个 bin 的第一个元素,但我不知道如何实现 LinQ。

标签: c#linq

解决方案


GroupByOrderByDescending并且First是你的朋友:

list = list.GroupBy(x => x.FamilyId)
           .Select(g => g.OrderByDescending(x => x.Score).First())
           .ToList();

请注意,如果有多个具有最大分数的情况下,这将采取任意的第一个。


推荐阅读