文章目录
- 前言
- 1. int 类型的list 去重
- 2. string类型的 list 去重
- 3. T泛型 List去重
- 4. 使用HashSet List去重
- 5. 创建静态扩展方法
- 总结
前言
.net 去重的几种情况
1. int 类型的list 去重
// 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 去重
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去重
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 myList1group p by new { p.Id, p.Name, p.Age } into gselect g).ToList();foreach (var item in myList2 ){Console.WriteLine("Id:" + item.Key.Id + ", Name:" + item.Key.Name + ", Age:" + item.Key.Age);}
4. 使用HashSet List去重
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. 创建静态扩展方法
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