У меня есть классы:
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();
, это все еще занимает много времени... Что я делаю неправильно?