c# - 如何在使用 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。
解决方案
GroupBy
,OrderByDescending
并且First
是你的朋友:
list = list.GroupBy(x => x.FamilyId)
.Select(g => g.OrderByDescending(x => x.Score).First())
.ToList();
请注意,如果有多个具有最大分数的情况下,这将采取任意的第一个。
推荐阅读
- siebel - 无法启动 Siebel 服务器
- c# - 加权数字总和
- google-cloud-platform - 更改 G Suite 主域名和重命名用户对 GCP 有何影响?
- angular - _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵvid"] 不是函数
- react-native - 从 React Native WebView 下载文件
- java - Eclipse 和 Tomcat 错误:HTTP 状态 404 – 未找到:
- twitter-bootstrap - 为什么单击选项卡时课程不活动?
- reactjs - Vue:组件中声明的道具未定义
- r - 关于在 R 中同时重新编码多个因子水平的问题
- python - 根据相邻行的字符串值替换csv中某行的值