c# - 使用分组依据以删除重复项

标签 c# linq collections duplicates

我正在寻找一种简单的方法来删除重复项,而不必实现 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/

相关文章:

c# - 如何在任务管理器中拥有不同的进程名称(当前进程)名称?

c# - 如何使用 Novacode DocX 在代码中为表格中的文本设置垂直方向?

c# - Linq表达式,获取参数?

java - 在 Java 中插入重复键值对并获取它们的插入顺序的最佳方法是什么

Java-如何从 HashMap 创建 Java Hashtable

java - 集合 : Printing the top five occurrences by reading from a file

c# - asp.net 中的鼠标滚动单击事件使用 c#(不是 Javascript)

c# - WinForms DataBinding 是否需要 BindingSource 和 BindingList?

c# - LINQ 多个关键字搜索到 PagedList

c# - 将 DataRowCollection 转换为 IEnumerable<T>