Как получить актуальный элемент из HashSet <T>? - PullRequest
70 голосов
/ 14 октября 2011

Я прочитал этот вопрос о том, почему это невозможно, но не нашел решения проблемы.

Я хотел бы получить элемент из .NETHashSet<T>.Я ищу метод, который будет иметь эту подпись:

/// <summary>
/// Determines if this set contains an item equal to <paramref name="item"/>, 
/// according to the comparison mechanism that was used when the set was created. 
/// The set is not changed. If the set does contain an item equal to 
/// <paramref name="item"/>, then the item from the set is returned.
/// </summary>
bool TryGetItem<T>(T item, out T foundItem);

Поиск набора для элемента с таким методом будет O (1).Единственный способ получить элемент из HashSet<T> - это перечислить все элементы, которые имеют O (n).

Я не нашел никакого решения этой проблемы, кроме как сделать свой собственный HashSet<T> или использоватьDictionary<K, V>.Любая другая идея?

Примечание:
Я не хочу проверять, содержит ли HashSet<T> элемент.Я хочу получить ссылку на элемент, который хранится в HashSet<T>, потому что мне нужно обновить его (не заменяя другим экземпляром).Элемент, который я передал бы TryGetItem, был бы равен (согласно механизму сравнения, который я передал конструктору), но это не будет та же ссылка.

Ответы [ 11 ]

0 голосов
/ 14 октября 2011

HashSet имеет метод Contains (T) .

Вы можете указать IEqualityComparer , если вам нужен пользовательский метод сравнения (например, сохранить личный объект, но использовать SSN для сравнения на равенство).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...