我有课程:
class SomeClass
{
public string Name{get;set;}
public int SomeInt{get;set;}
}
class SomeComparison: IEqualityComparer<SomeClass>
{
public bool Equals(SomeClass s, SomeClass d)
{
return s.Name == d.Name;
}
public int GetHashCode(SomeClass a)
{
return (a.Name.GetHashCode() * 251);
}
}
我也有两个大List<SomeClass>
的叫list1
和list2
在我以前有:
var q = (from a in list1
from b in list2
where a.Name != b.Name
select a).ToList();
这需要大约 1 分钟来执行。我现在有:
var q = list1.Except(list2,new SomeComparison()).ToList();
这需要不到 1 秒的时间!
我想了解 except 方法的作用。该方法是否创建每个列表的哈希表,然后执行相同的比较?如果我要进行很多这样的比较,我应该创建一个 Hashtable 吗?
编辑
现在,我没有列表,而是HashSet<SomeClass>
调用 hashSet1
了两个hashSet2
当我做:
var q = (from a in hashSet1
form b in hashSet2
where a.Name != b.Name
select a).ToList();
这仍然需要很长时间......我做错了什么?