打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# List 根据对象属性去重的四种方法对比
private void TestDistinct(){    Task.Run(() =>    {        //生成测试数据        DateTime dt = DateTime.Now;        Random rnd = new Random();        List<MyData> list = new List<MyData>();        int total = 1000000;        for (int i = 0; i < total; i  )        {            MyData info = new MyData();            info.id = rnd.Next(1, total * 10).ToString();            info.name = rnd.Next(1, total * 10).ToString();            list.Add(info);        }        double d = DateTime.Now.Subtract(dt).TotalMilliseconds;        //方法一        DateTime dt1 = DateTime.Now;        Dictionary<string, MyData> result1 = new Dictionary<string, MyData>();        foreach (MyData item in list)        {            MyData temp;            if (!result1.TryGetValue(item.name, out temp))            {                result1.Add(item.name, item);            }        }        List<MyData> r1 = result1.Values.ToList();        double d1 = DateTime.Now.Subtract(dt1).TotalMilliseconds;        //方法二        DateTime dt2 = DateTime.Now;        List<MyData> result2 = list.ToLookup(item => item.name).ToDictionary(item => item.Key, item => item.First()).Values.ToList();        double d2 = DateTime.Now.Subtract(dt2).TotalMilliseconds;        //方法三        DateTime dt3 = DateTime.Now;        List<MyData> result3 = list.Distinct(new MyCompare()).ToList();        double d3 = DateTime.Now.Subtract(dt3).TotalMilliseconds;        //方法四        DateTime dt4 = DateTime.Now;        List<MyData> result4 = list.GroupBy(item => item.name).Select(item => item.First()).ToList();        double d4 = DateTime.Now.Subtract(dt4).TotalMilliseconds;        this.BeginInvoke(new Action(() =>        {            textBox1.Text = "";            textBox1.Text  = "生成 "   list.Count.ToString("# ####")   " 条测试数据耗时:"   d   "毫秒\r\n\r\n";            textBox1.Text  = "使用方法一去重耗时:"   d1   "毫秒\r\n\r\n";            textBox1.Text  = "使用ToLookup和ToDictionary去重耗时:"   d2   "毫秒\r\n\r\n";            textBox1.Text  = "使用Distinct去重耗时:"   d3   "毫秒\r\n\r\n";            textBox1.Text  = "使用GroupBy和Select去重耗时:"   d4   "毫秒\r\n\r\n";            textBox1.Text  = "去重后数量:"   r1.Count   ","   result2.Count   ","   result3.Count   ","   result4.Count   ""   "\r\n\r\n";        }));    });}
public class MyData{    public string id { get; set; }    public string name { get; set; }}public class MyCompare : IEqualityComparer<MyData>{    public bool Equals(MyData x, MyData y)    {        return x.name == y.name;    }    public int GetHashCode(MyData obj)    {        return obj.name.GetHashCode();    }}

 

 

测试结果:

来源:https://www.icode9.com/content-1-599551.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 导入Excel到数据库
操作客户端IP类(C#)
C#同步网络时间
C# 定时任务之Quartz.Net
C# 反射机制
C#中如何处理Delphi的REST Server返回的复杂结构资料
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服