Я прочитав це запитання про те, чому це неможливо, але не знайшов рішення проблеми.
Я хотів би отримати елемент із .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). Єдиний спосіб отримати елемент з a HashSet<T>
- це перерахувати всі елементи, які мають значення O (n).
Я не знайшов жодного способу вирішення цієї проблеми, окрім того, щоб зробити свій власний HashSet<T>
або використовувати Dictionary<K, V>
. Будь-яка інша ідея?
Примітка:
Я не хочу перевіряти, чи HashSet<T>
містить елемент. Я хочу отримати посилання на елемент, який зберігається в HashSet<T>
тому, що мені потрібно його оновити (без заміни іншим екземпляром). Елемент, який я передав TryGetItem
би, буде рівним (відповідно до механізму порівняння, який я передав конструктору), але це не буде однаковим посиланням.