C#List<T>去重常用LINQ实现写法

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();
    }
}

posted @ 2026-05-26 15:23  人生就是修炼  阅读(5)  评论(0)    收藏  举报