using System.Collections.Generic;
using System.Linq;
namespace List集合去重常用LINQ实现写法
{
class Program
{
static void Main()
{
//1. 值类型直接去重
List<int> list = new List<int> { 1, 2, 2, 3, 3 };
List<int> res = list.Distinct().ToList();
//2. 对象单字段去重
List<User> userList1 = new List<User>();
// 按Id分组取第一条
var res1 = userList1.GroupBy(u => u.Id)
.Select(g => g.First())
.ToList();
//3.对象多字段联合去重
List<User> userList2 = new List<User>();
var res2 = userList2.GroupBy(x => new { x.Id, x.Name })
.Select(g => g.First())
.ToList();
//4.自定义比较器 Distinct
List<User> userList3 = new List<User>();
var res3 = userList3.Distinct(new UserComparer()).ToList();
//5. .NET6 + 原生 DistinctBy 按键去重
//List<User> userList4 = new List<User>();
//var res4 = userList4.DistinctBy(u => u.Id).ToList();
}
}
//2. 对象单字段去重
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
//4. 自定义比较器 Distinct
public class UserComparer : IEqualityComparer<User>
{
public bool Equals(User x, User y) => x.Id == y.Id;
public int GetHashCode(User obj) => obj.Id.GetHashCode();
}
}