如何加快列表中的比较操作< T>? [英] How speed up compare operation in lists<T>?

查看:60
本文介绍了如何加快列表中的比较操作< T>?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个类Helper和FileDB。我创建了两个List< t>



 List< FileDB> listFileDB =  new  List< FileDB>(); 
List< Helper> listHelper = new 列表< Helper>();





 助手
{
public string Articule { get ; set ; }
public 列表<日期>日期{获取; set ; } = new 列表< Date>();
}
class 日期
{
public DateTime数据{获取; set ; }
public string Cnt { get ; set ; }
}



////////////



< pre lang =c#> class FileDB
{
public string Articule { get ; set ; }
public string Naim { get ; set ; }
public string Cnt { get ; set ; }
}



我有算法,比较这个列表。所有工作,但我的操作,如果比较工作非常缓慢。我不明白为什么。我在两个列表中只有50k数据。



  for (< span class =code-keyword> int  i =  0 ; i <  listHelper .Count; i ++){
bool flag = false ;
for int j = 0 ; j < listFileDB.Count; j ++){
if (listHelper [i ] .Articule == listFileDB [j] .Articule){
flag = true ;
日期日期= 日期();
date.Data = Convert.ToDateTime(Path.GetFileNameWithoutExtension(file));
date.Cnt = listFileDB [j] .Cnt;
listHelper [i] .Dates.Add(date);
}
}
if (flag == false ){
日期日期= 日期();
date.Data = Convert.ToDateTime(Path.GetFileNameWithoutExtension(file));
date.Cnt = 0;
listHelper [i] .Dates.Add(date);
}
}





我的尝试:



我尝试使用我的算法,但它的速度非常慢

解决方案

调用排序( )列表中的方法然后很容易通过列表逐步比较最后一个到当前的重复项目。


I have two classes Helper and FileDB. I have create two List<t>

List<FileDB> listFileDB = new List<FileDB>();
List<Helper> listHelper = new List<Helper>();



class Helper
    {
        public string Articule { get; set; }
        public List<Date> Dates { get; set; } = new List<Date>();
    }
    class Date
    {
        public DateTime Data { get; set; }
        public string Cnt { get; set; }
    }


////////////

class FileDB
   {
    public string Articule { get; set; }
    public string Naim { get; set; }
    public string Cnt { get; set; }
   }


I have algo, that compare this lists. All work, but my operation if compare work very slowly. I dont understand why. I have only 50k data in both lists.

for (int i = 0; i < listHelper.Count; i++) {
  bool flag = false;
  for (int j = 0; j < listFileDB.Count; j++) {
   if (listHelper[i].Articule == listFileDB[j].Articule) {
    flag = true;
    Date date = new Date();
    date.Data = Convert.ToDateTime(Path.GetFileNameWithoutExtension(file));
    date.Cnt = listFileDB[j].Cnt;
    listHelper[i].Dates.Add(date);
   }
  }
  if (flag == false) {
   Date date = new Date();
   date.Data = Convert.ToDateTime(Path.GetFileNameWithoutExtension(file));
   date.Cnt = "0";
   listHelper[i].Dates.Add(date);
  }
 }



What I have tried:

I try use my algo, but its speed is very slow

解决方案

Call the Sort() method on the list then it is easy to step through the list comparing last to current to see the duplicate items.


这篇关于如何加快列表中的比较操作&lt; T&gt;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆