私はクラスを持っています:
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);
}
}
私はまた2つの大きな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メソッドが何をするのか理解したいと思います。このメソッドは、各リストのハッシュテーブルを作成してから、同じ比較を実行しますか?この比較をたくさん実行する場合は、代わりにハッシュテーブルを作成する必要がありますか?
編集
今、リストを持っている代わりに、私は2つHashSet<SomeClass>
と呼ばれ hashSet1
ていますhashSet2
私がする時:
var q = (from a in hashSet1
form b in hashSet2
where a.Name != b.Name
select a).ToList();
それでもまだ長い時間がかかります...私は何が間違っているのですか?