C# List<T>取并集并去重的两种方法时间消耗比较


文章目录

  • C# List\取并集并去重的两种方法时间消耗比较
  • 前言
  • 一、两种方法
  • 二、时间计算方法
    • 1.Stopwatch
  • 三、数据
  • 四、总代码
  • 结果总结

前言

  1. 当时是个人要对泛型集合进行合并并且去除重复项,这里有个要点:
    – 对于值类型:可以直接操作。
    对于引用类型:要继承IEqualityComparer()接口实现新的比较方法,来适应你的类型。
  • 结尾有全部代码

一、两种方法

  1. 第一种:不调用其他方法,直接对集合AddRange再Distinct去重
example.AddRange(example);
example.ToList().Distinct();
  1. 第二种:调用Linq的Union方法
example.Union(lastSameExample).ToList();

二、时间计算方法

1.Stopwatch

//时间监视方法
Dictionary<string, double> timeDictionary1 = new Dictionary<string, double>();Stopwatch stopwatch = new Stopwatch();stopwatch.Start();
example.AddRange(example);
example.ToList().Distinct();
stopwatch.Stop();
//获取时间(ms)
timeDictionary1.Add("SameList",stopwatch.Elapsed.TotalMilliseconds);

三、数据

取26个字母放入字符串列表:
完全不相同、第一个相同、最后一个相同、中间的相同

 List<string> example = new List<string>()
{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"
};
List<string> notSameExample = new List<string>()
{"a","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","zz"
};List<string> firstSameExample = new List<string>()
{"a","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","zz"
};
List<string> lastSameExample = new List<string>()
{"aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","z"
};
List<string> middleSameExample = new List<string>()
{"aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","m","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","z"
};

四、总代码

public void Method_TimeUse(){List<string> example = new List<string>(){"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};List<string> notSameExample = new List<string>(){"a","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","zz"};List<string> firstSameExample = new List<string>(){"a","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","zz"};List<string> lastSameExample = new List<string>(){"aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","z"};List<string> middleSameExample = new List<string>(){"aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","m","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","z"};Dictionary<string, double> timeDictionary1 = new Dictionary<string, double>();Dictionary<string, double> timeDictionary2 = new Dictionary<string, double>();//时间监视方法Stopwatch stopwatch = new Stopwatch();//第一种:不调用其他方法,直接对集合AddRange再Distinct去重stopwatch.Start();example.AddRange(example);example.ToList().Distinct();stopwatch.Stop();timeDictionary1.Add("SameList",stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.AddRange(notSameExample);example.ToList().Distinct();stopwatch.Stop();timeDictionary1.Add("NotSameList", stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.AddRange(firstSameExample);example.ToList().Distinct();stopwatch.Stop();timeDictionary1.Add("FirstSameList", stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.AddRange(lastSameExample);example.ToList().Distinct();stopwatch.Stop();timeDictionary1.Add("LastSameList", stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.AddRange(middleSameExample);example.ToList().Distinct();stopwatch.Stop();timeDictionary1.Add("MiddleSameList", stopwatch.Elapsed.TotalMilliseconds);//第二种:调用Union方法stopwatch.Start();example.Union(example).ToList();stopwatch.Stop();timeDictionary2.Add("SameList", stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.Union(notSameExample).ToList();stopwatch.Stop();timeDictionary2.Add("NotSameList", stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.Union(firstSameExample).ToList();stopwatch.Stop();timeDictionary2.Add("FirstSameList", stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.Union(lastSameExample).ToList();stopwatch.Stop();timeDictionary2.Add("LastSameList", stopwatch.Elapsed.TotalMilliseconds);stopwatch.Start();example.Union(middleSameExample).ToList();stopwatch.Stop();timeDictionary2.Add("MiddleSameList", stopwatch.Elapsed.TotalMilliseconds);_testOutputHelper.WriteLine("第一种:不调用其他方法,直接对集合AddRange再Distinct去重");foreach(var item in timeDictionary1){_testOutputHelper.WriteLine($"ListType:{item.Key}   TimeUse:{item.Value}");}_testOutputHelper.WriteLine("第二种:调用Union方法");foreach (var item in timeDictionary2){_testOutputHelper.WriteLine($"ListType:{item.Key}   TimeUse:{item.Value}");}}

结果总结

  • Union方法中有着其他的过程,但具体个人并未深入。
  • 就图中结果而言,差距很大,还是老老实实用第一个吧。
  • 本人新手,欢迎各位大佬指点一二。

【知识学习】C# List<T>取并集并去重的两种方法时间消耗比较相关推荐

  1. oracle事务数统计,【学习笔记】Oracle数据库收集统计信息的两种方法介绍案例

    天萃荷净 分享一篇关于Oracle数据库收集统计信息的办法,Oracle DBMS_STATS与Oracle analyze使用方法案例 今天群里面讨论DBMS_STATS和analyze,这里进行了 ...

  2. git 拉取远程分支到本地(两种方法)

    By: Ailson Jack Date: 2019.10.13 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/ ...

  3. day04 爬取豌豆荚app数据的两种方法

    今日内容:方法一 bs4爬取豌豆荚 爬取豌豆荚: 1.访问游戏主页 https://www.wandoujia.com/category/6001 2.点击查看更多,观察network内的请求 - 请 ...

  4. Python3爬取有道翻译的两种方法

    一. 破解参数加密 有道翻译的请求是post,携带一系列参数,直接F12刷新进行调试,如下图所示: 这是一个 post 请求,目标网址是 'http://fanyi.youdao.com/transl ...

  5. python字典取值_python 字典中取值的两种方法小结

    python 字典中取值的两种方法小结 如下所示: a={'name':'tony','sex':'male'} 获得name的值的方式有两种 print a['name'],type(a['name ...

  6. python实现人脸口罩检测(基于opencv和深度学习两种方法)

    人脸口罩检测GUI系统(基于opencv和深度学习两种方法对比) 由于疫情的影响,人脸口罩检测系统的开发成为很多人争相开发的一种算法.很多公司或者个人都开源了他们很多的代码或者SDK.大家在GitHu ...

  7. 防止email被抓取的两种方法(js和css)

    现在很多无聊人士都用自己的spider在网上到处抓取email, 如果你的页面上写了自己的email,那么不多久就会收到很多垃圾邮件. 有很多方法可以避免被抓取,现在很多人都把@换成#,不过估计很多蜘 ...

  8. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  9. caffe学习日记--lesson7:caffemodel可视化的两种方法

    在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py 本文将就这两种方法加以介绍 Netscope:支持Ca ...

最新文章

  1. android w700
  2. Linux C编程--main函数参数解析
  3. 07 ORA系列:ORA-01747 或列说明无效 user.table.column, table.column
  4. VS远程调试(Visual Studio)远程连接到linux cmake(跨平台开发)(适用于VS2019,且远程目标平台cmake版本大于等于3.8)
  5. 网易云信+妙克:从零到标杆的在线音视频音乐教学之路
  6. Zuhair and Strings
  7. 计算机专业未来希望,中国人才最紧缺的6个大学专业,希望你不要错过。
  8. 台积电晶圆14A厂周三曾因断电而部分停产 预计损失不低于2800万美元
  9. 用canvas实现手写签名功能
  10. ODOO_posbox_打印出的小票(收据)如何修改?
  11. Spring之Bean后处理器——BeanPostProcessor的使用与源码解析
  12. kindle 耗电飞速,电池坏了?你可能给kindle“吃了有毒的食物”
  13. 毕达哥拉斯定理a^2 + b^2 =c^2
  14. 计算机病毒的常用方法,常用计算机检测病毒的方法
  15. 异硫氰酸荧光素标记磁性四氧化三铁纳米粒FITC-Hyd-PEG-Fe3O4|近红外染料CY7.5标记纳米二氧化硅CY7.5-SiO2 NPs
  16. unit自动驾驶怎么使用_自动驾驶与驾驶辅助系统 正确使用驾驶辅助系统
  17. 让美容院业绩翻番,您只差一套软多共享股东系统
  18. 微信平台发布谣言整治报告:近半年处罚公众号约4.5万个
  19. win7虚拟机不安装VMware Tools实现传输文件
  20. 高德地图自定义点标记大小_高德地图 自定义点标记 图标大小

热门文章

  1. h5写的指南针(DeviceOrientation ),调用手机罗盘,可以转动
  2. 阿里云APP消息推送中间件使用
  3. sprintf 和 snprintf区别
  4. 如何构建用户画像系统?看这一篇就够了!
  5. 小家电快充芯片,小家电type-C快充方案芯片 LDR6328S PD取电芯片
  6. 伺服电机常用参数设置_伺服电机驱动器的几个参数设置
  7. 江南大学计算机有博士点吗,江南大学新增3个一级学科博士点、13个一级学科硕士点...
  8. ros入门(七)--ros接入sick激光雷达
  9. 数据类型及其存储方式(C语言详解)
  10. Ubuntu系统下载安装WPS并卸载Libreoffice文档编辑软件