如何加快列表中的比较操作< T>? [英] How speed up compare operation in lists<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 ; }
}
I have two classes Helper and FileDB. I have create two List<t> 这篇关于如何加快列表中的比较操作< T>?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
////////////
< 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);
}
}
我的尝试:
我尝试使用我的算法,但它的速度非常慢调用
排序( )
列表中的方法然后很容易通过列表逐步比较最后一个到当前的重复项目。
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 slowCall the
Sort()
method on the list then it is easy to step through the list comparing last to current to see the duplicate items.