Przeczytałem to pytanie, dlaczego nie jest to możliwe, ale nie znalazłem rozwiązania problemu.
Chciałbym pobrać element z platformy .NET HashSet<T>
. Szukam metody, która miałaby taki podpis:
/// <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);
Przeszukanie zbioru pod kątem elementu taką metodą to O (1). Jedynym sposobem na pobranie elementu z a HashSet<T>
jest wyliczenie wszystkich elementów, które są O (n).
Nie znalazłem innego rozwiązania tego problemu niż utworzenie własnego HashSet<T>
lub użycie pliku Dictionary<K, V>
. Masz inny pomysł?
Uwaga:
nie chcę sprawdzać, czy HashSet<T>
zawiera element. Chcę uzyskać odniesienie do elementu, który jest przechowywany w pliku, HashSet<T>
ponieważ muszę go zaktualizować (bez zastępowania go inną instancją). Element, do którego TryGetItem
przekażę, byłby równy (zgodnie z mechanizmem porównania, który przekazałem konstruktorowi), ale nie byłby to to samo odniesienie.