当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-04-24 17:34:26 276观看
导读今天我们一起来讨论一下关于C#数据去重的的5种方式,每种方法都有其特点和适用场景,我们根据具体需求选择最合适的方式。使用HashSet去重C# 中的 HashSet 是一种集合类型,它确保其中的元素是唯一的,不允许重复值的存在。当

今天我们一起来讨论一下关于C#数据去重的的5种方式,每种方法都有其特点和适用场景,我们根据具体需求选择最合适的方式。jk728资讯网——每日最新资讯28at.com

jk728资讯网——每日最新资讯28at.com

使用HashSet去重

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

        /// <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。jk728资讯网——每日最新资讯28at.com


jk728资讯网——每日最新资讯28at.com

jk728资讯网——每日最新资讯28at.com

        /// <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()方法将原始集合中的元素进行分组,根据指定的键或条件进行分组。每个分组都会有一个唯一的键,通过将原始集合分组并选择每个分组中的第一个元素,实现了去重的效果。jk728资讯网——每日最新资讯28at.com

jk728资讯网——每日最新资讯28at.com

       /// <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.csjk728资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85229-0.htmlC#数据去重的五种方式,你知道几种?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 呀,Python中居然还有字典推导式

下一篇: React 18的并发渲染:颠覆传统的性能飞跃

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
Top