Допустим, есть класс, у которого есть 2 цифровых поля.
Хотелось бы эти 2 поля сделать первичным ключем в Dictionary.
В будущем этот ключ будет использоваться для поиска совпавших значений между 2 мя словарями.
Как это можно сделать, что бы не потерять в производительности?
У меня была идея, хранить их как строку, но может быть есть решение лучше?
P.S
Dictionary использую из-за высокой скорости поиска по ключу.
К моему удивлению, DataTable оказался тормознутее=( на 20к строк
Как один из вариантов
Можно использовать класс Tuple. Например Dictionary<Tuple<T1,T2>, T3>,
где T1, T2, T3 значения любых типов. В Tuple сравниваться будет по
внутренним значениям.
у Tuple переопределены методы GetHashCode и Equals © Grundy
IEqualityComparer<T> в конструктор, где Т - тип ключа. Сравнение будет производиться с использованием компаратора.Есть несколько путей использовать составной ключ для Dictionary (аналогично для HashSet)
Использовать структуру. Правила сравнения структур таковы, что сравниваются значения всех полей, а не ссылки на объекты.
Использовать класс с переопределенными методами Equals, GetHashCode. Это позволит использовать для вычисления хэша не все поля класса, а только нужные.
Использовать класс реализующий IEquatable<T>
Использовать при создании словаря перегрузку конструктора принимающую IEqualityComparer<T>
Вероятно, Tuple подойдёт для использования в качестве ключа.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей