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


    前言

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

    使用HashSet去重

    HashSet的唯一性:

    HashSet 中的元素是唯一的,不允许重复值。如果试图添加重复的元素,HashSet 不会引发错误,而是简单地忽略重复的值。

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

    使用Linq的Distinct()方法去重

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

            /// 
            /// 使用Linq的Distinct()方法去重
            /// 
            public static void DistinctDuplicate()
            {
                var dataSource = new List<int>() { 1232588999910088305015100999923 };
                var uniqueData = dataSource.Distinct();
    
                Console.WriteLine(string.Join(", ", uniqueData));
            }
    

    使用Linq的GroupBy()方法去重

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

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

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

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

    直接循环遍历去重

            /// 
            /// 直接循环遍历去重
            /// 
            public static void LoopTraversalDuplicate()
            {
                var dataSource = new List<int>() { 1232588999910088305015100999923 };
                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));
            }
    

    加入DotNetGuide技术交流群

    在DotNetGuide技术交流群中可以结识更多志同道合的开发者,甚至可能与其他开发者合作完成有趣的项目。通过这个群组,我们希望能够搭建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值。

    欢迎加入DotNetGuide技术交流群👉

    示例代码

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

  • 相关阅读:
    图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型
    NumPy 分割与搜索数组详解
    Linux内核作业
    Node.js | 强大的包管理器:npm 和 yarn
    比肩Midjourney-v6!没有GPU也能跑可图Kolors
    Android 使用ContentObserver监听SettingsProvider值的变化
    深度探讨网络安全:挑战、防御策略与实战案例
    共模干扰、差模干扰 以及运放共模抑制比(Common-mode rejection ratio, CMRR)
    分析 NFT 项目的 5 个指标
    Android Settings解析
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/17583800.html