.net-去重的几种情况

文章目录

  • 前言
      • [1. int 类型的list 去重](#1. int 类型的list 去重)
      • [2. string类型的 list 去重](#2. string类型的 list 去重)
      • [3. T泛型 List去重](#3. T泛型 List去重)
      • [4. 使用HashSet List去重](#4. 使用HashSet List去重)
      • [5. 创建静态扩展方法](#5. 创建静态扩展方法)
  • 总结

前言

.net 去重的几种情况


1. int 类型的list 去重

js 复制代码
//  List<int> 
  List<int> myList = new List<int>(){ 100 , 200 ,100 ,300};
        myList  = myList.Distinct().ToList();
        foreach (var item in myList)
        {
            Console.WriteLine(item); // 100 200 300
        }

2. string类型的 list 去重

js 复制代码
 List<string> myList = new List<string>(){ "100" , "200" ,"300" ,"300"};
        myList  = myList.Distinct().ToList();
        foreach (var item in myList)
        {
            Console.WriteLine(item);
        }

3. T泛型 List去重

js 复制代码
 public class User
 {
   public int Id { get; set; }
   public string Name { get; set; }
   public int Age { get; set;}
 }

 List<User> myList1= new List<User>() 
 { 
    new User() { Id = 1, Name = "张三", Age = 11 } ,
    new User() { Id = 1, Name = "张三", Age = 11} ,
    new User() { Id = 3, Name = "李四", Age = 13 } ,
 };
 // groupBy 方式
 myList1= myList1.GroupBy(p => p.Id).Select(q => q.First()).ToList();
 foreach (var item in myList1)
 {
   Console.WriteLine("Id:" + item.Id + ", Name:" + item.Name + ", Age:" + item.Age);
 }
 
 //  key 方式如下图
 var myList2 = (from p in myList1
              group p by new { p.Id, p.Name, p.Age } into g
              select g).ToList();
 foreach (var item in myList2 )
 {
    Console.WriteLine("Id:" + item.Key.Id + ", Name:" + item.Key.Name + ", Age:" + item.Key.Age);
 }

4. 使用HashSet List去重

js 复制代码
List<int> list = new List<int> { 1, 2, 2, 3, 4, 4, 5 };
        HashSet<int> set = new HashSet<int>(list);
        List<int> distinctList = set.ToList();

5. 创建静态扩展方法

js 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var people = new List<Person>
            {
                new Person {Id=1,Name="Curry",Age=26 },
                new Person {Id=1,Name="Curry",Age=26 },
                new Person {Id=3,Name="James",Age=27 },
                new Person {Id=4,Name="Kobe",Age=38 }
            };
            var distinctPeople = people.DistinctBy(x => x.Name).ToList();
            distinctPeople.ForEach(x =>
            Console.WriteLine($"Id:{x.Id},Name:{x.Name},Age:{x.Age}")
            );
            Console.ReadKey();
        }
    }
 
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    // 创建静态扩展方法
    public static class DistinctHelper
    {
        public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
        {
            var identifiedKeys = new HashSet<TKey>();
            return source.Where(element => identifiedKeys.Add(keySelector(element)));
        }
    }
}

总结

本文探讨了在.net 几种常用类型数组的去重方式,关键用到 Distinct(),GroupBy(), HashSet。

参考:

https://blog.csdn.net/laizhixue/article/details/89228355

相关推荐
一个帅气昵称啊6 分钟前
.Net C# AI 如何实现联网搜索
人工智能·c#·.net
amazing-yuan29 分钟前
Windows系统查看是否已安装Mysql,查找Mysql的安装地址,忘记root账号的密码时重置密码操作指引
数据库·windows·mysql
cur1es35 分钟前
【IO与文件及存储常识】
windows·io·文件系统·存储·file·硬盘·文件常识
jingqiulyue1 小时前
windows 家庭版 不显示Hyper-v怎么办
windows
Three~stone2 小时前
windows和liunx(Ubuntn/CentOS/Deepin/Fedora)资源镜像附Vmware安装包
linux·windows·centos
iFlow_AI2 小时前
使用iFlow CLI通过hook添加任务完成通知(定制你的个性化通知) Windows版
windows·hook·iflow·iflow cli
猫头虎2 小时前
如何把家里 NAS 挂载到公司电脑当“本地盘”用?(Windows & Mac 通过SMB协议挂载NAS硬盘教程,节点小宝异地组网版)
windows·网络协议·计算机网络·macos·缓存·人机交互·信息与通信
Whoami!2 小时前
⓫⁄₂ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 获取目标主机的基本信息(上)
windows·网络安全·信息安全·信息收集
az44yao2 小时前
windows api 创建mdi程序
windows·stm32·单片机
Traced back2 小时前
三层架构的补充
windows·架构