我正在寻找一种简单的方法来删除重复项,而不必实现 IComparable 类,不必重写 GetHashCode 等。
我认为这可以用 linq 来实现。我有课:
class Person
{
public string Name;
public ing Age;
}
我有一个大约 500 人的列表 List<Person> someList = new List<Person()
现在我想删除同名的人,如果有重复的人,我想保留年龄较大的人。换句话说,如果我有列表:
Name----Age---
Tom, 24 |
Alicia, 22 |
Alicia, 12 |
我想结束:
Name----Age---
Tom, 24 |
Alicia, 22 |
我如何通过查询来做到这一点?我的列表并不长,所以我不想创建哈希集,也不想实现 IComparable 接口(interface)。如果我可以使用 linq 查询来执行此操作,那就太好了。
我认为这可以通过 groupBy 扩展方法来完成,方法如下:
var people = // the list of Person
person.GroupBy(x=>x.Name).Where(x=>x.Count()>1)
... // select the person that has the greatest age...
最佳答案
people
.GroupBy(p => p.Name)
.Select(g => g.OrderByDescending(p => p.Age).First())
这将适用于不同的 Linq 供应商。如果这只是 Linq2Objects,并且速度很重要(通常不是),请考虑使用网络上找到的许多 MaxBy 扩展之一(这里是 Skeet 的)并替换
g.OrderByDescending(p => p.Age).First()
与
g.MaxBy(p => p.Age)
关于c# - 使用分组依据以删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17556062/