C#数据去重的5种方式,你知道几种?

大模型机器学习算法

picture.image

picture.image

前言

今天我们一起来讨论一下关于C#数据去重的的5种方式,每种方法都有其特点和适用场景,我们根据具体需求选择最合适的方式。当然欢迎你在评论区留下你觉得更好的C#数据去重的方式。

使用HashSet去重

C# 中的 HashSet 是一种集合类型,它确保其中的元素是唯一的,不允许重复值的存在。当你尝试向 HashSet 中添加一个重复的元素时,HashSet 会忽略重复的值,而不会引发错误。这使得 HashSet 成为一个非常方便的数据结构,用于存储一组唯一的元素,并且在需要时可以高效地进行查找、插入和删除操作,注意HashSet中的元素是无序的。

  
        /// <summary>  
        /// 使用HashSet去重  
        /// TODO:HashSet是一个集合类,它的特点是不允许重复元素,可以方便地实现去重功能。  
        /// </summary>  
        public static void HashSetDuplicate()  
        {  
            var dataSource = new List<int>() { 1, 2, 3, 2, 5, 88, 99, 99, 100, 88, 30, 50, 15, 100, 99, 99, 2, 3 };  
            HashSet<int> uniqueData = new HashSet<int>(dataSource);  
  
            Console.WriteLine(string.Join(", ", uniqueData));  
        }  

使用Linq的Distinct()方法去重

Linq中的Distinct()方法用于从集合中筛选出不重复的元素。Distinct()方法基于元素的相等性来进行筛选,并返回一个包含不重复元素的新序列。底层实现还是使用到了HashSet。

  
        /// <summary>  
        /// 使用Linq的Distinct()方法去重  
        /// </summary>  
        public static void DistinctDuplicate()  
        {  
            var dataSource = new List<int>() { 1, 2, 3, 2, 5, 88, 99, 99, 100, 88, 30, 50, 15, 100, 99, 99, 2, 3 };  
            var uniqueData = dataSource.Distinct();  
  
            Console.WriteLine(string.Join(", ", uniqueData));  
        }  

使用Linq的GroupBy()方法去重

GroupBy()方法将原始集合中的元素进行分组,根据指定的键或条件进行分组。每个分组都会有一个唯一的键,通过将原始集合分组并选择每个分组中的第一个元素,实现了去重的效果。

  
        /// <summary>  
        /// 使用Linq的GroupBy()方法去重  
        /// </summary>  
        public static void GroupByDuplicate()  
        {  
            var dataSource = new List<int>() { 1, 2, 3, 2, 5, 88, 99, 99, 100, 88, 30, 50, 15, 100, 99, 99, 2, 3 };  
  
            //GroupBy()方法将原始集合中的元素进行分组,根据指定的键或条件进行分组。每个分组都会有一个唯一的键,通过将原始集合分组并选择每个分组中的第一个元素,实现了去重的效果。  
            var uniqueData = dataSource.GroupBy(item => item).Select(group => group.First()).ToList();  
  
            Console.WriteLine(string.Join(", ", uniqueData));  
        }  

使用自定义的比较器和循环遍历

  
    public class ArrayDeduplication  
    {  
        /// <summary>  
        /// 使用自定义的比较器和循环遍历  
        /// </summary>  
        public static void CustomEqualityComparerDuplicate()  
        {  
            var dataSource = new List<int>() { 1, 2, 3, 2, 5, 88, 99, 99, 100, 88, 30, 50, 15, 100, 99, 99, 2, 3 };  
            var uniqueData = new List<int>();  
            foreach (var item in dataSource)  
            {  
                if (!uniqueData.Contains(item, new CustomEqualityComparer()))  
                {  
                    uniqueData.Add(item);  
                }  
            }  
            Console.WriteLine(string.Join(", ", uniqueData));  
        }  
    }  
          
    /// <summary>  
    /// 自定义的比较器  
    /// </summary>  
    public class CustomEqualityComparer : IEqualityComparer<int>  
    {  
        public bool Equals(int x, int y)  
        {  
            return x == y;  
        }  
  
        public int GetHashCode(int obj)  
        {  
            return obj.GetHashCode();  
        }  
    }  

直接循环遍历去重

  
        /// <summary>  
        /// 直接循环遍历去重  
        /// </summary>  
        public static void LoopTraversalDuplicate()  
        {  
            var dataSource = new List<int>() { 1, 2, 3, 2, 5, 88, 99, 99, 100, 88, 30, 50, 15, 100, 99, 99, 2, 3 };  
            var uniqueData = new List<int>();  
            foreach (var item in dataSource)  
            {  
                //if (!uniqueData.Any(x => x == item))  
                //if (!uniqueData.Exists(x => x == item))  
                if (!uniqueData.Contains(item))  
                {  
                    uniqueData.Add(item);  
                }  
            }  
            Console.WriteLine(string.Join(", ", uniqueData));  
        }  

示例源码

https://github.com/YSGStudyHards/DotNetGuide/blob/main/DotNetGuidePractice/HelloDotNetGuide/%E6%95%B0%E7%BB%84%E7%9B%B8%E5%85%B3/ArrayDeduplication.cs

picture.image

picture.image

picture.image


学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江河!!!

picture.image

See you next good day

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论