Получить ключ, равный элементу из SortedDictionary? - PullRequest
0 голосов
/ 16 мая 2011

Есть ли способ получить ключ из SortedDictionary, который равен данному объекту?Для иллюстрации, скажем, я создаю словарь с довольно объемным неизменяемым типом ключа:

var dictionary = SortedDictionary<MyHugeType, int>();
var myEnormousKey = new MyHugeType();

dictionary[myEnormousKey] = 123;

Затем я сделаю что-то подобное:SortedDictionary не имеет метода «GetKeyEqualTo».Но есть ли способ, которым я мог бы достичь подобного эффекта?Это в основном будет иметь эффект интернирования объектов с тяжелыми ключами, чтобы идентичные экземпляры могли быть отброшены.Я знаю, что могу сделать это, используя класс SortedList, получая индекс ключа и впоследствии соответствующий ему экземпляр объекта, но согласованная производительность вставки SortedDictionary была бы лучше для моего использования.для соответствия или написания моего собственного класса BST, есть ли способ достичь этой цели с помощью встроенных коллекций .NET?

Ответы [ 3 ]

1 голос
/ 16 мая 2011

Вы можете изменить ваш объект-значение с int на структуру или класс, содержащий как значение, так и исходный ключ.Затем для доступа к исходному ключу вы можете сделать:

dictionary[myIdenticalKey].OriginalKey

и для значения что-то вроде:

dictionary[myIdenticalKey].Value
0 голосов
/ 16 мая 2011

Если вы переопределите Equals() и GetHashCode() в MyHugeType с помощью кода, который определяет, совпадают ли два экземпляра, то вы не получите повторяющиеся ключи в словаре.Это то, что вы имеете в виду?

0 голосов
/ 16 мая 2011

Вы можете реализовать интерфейс IEquatable в своем классе ключей.Там вы указываете, когда два объекта класса равны друг другу.После этого вы просто проверяете существование записи с помощью ContainsKey, а когда она возвращает true, вы можете получить ее с помощью оператора [].

Вы также можете предоставить реализацию IComparer для достижениятот же результат.

...