Я прочитал этот вопрос о том, почему это невозможно, но не нашел решения проблемы.
Я хотел бы получить элемент из .NET HashSet<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
, был бы равен (в соответствии с механизмом сравнения, который я передал конструктору), но это не будет той же ссылкой.