Ho letto questa domanda sul perché non è possibile, ma non ho trovato una soluzione al problema.
Vorrei recuperare un elemento da un .NET HashSet<T>
. Sto cercando un metodo che abbia questa firma:
/// <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);
La ricerca del set per un elemento con un tale metodo sarebbe O (1). L'unico modo per recuperare un elemento da a HashSet<T>
è enumerare tutti gli elementi che è O (n).
Non ho trovato alcuna soluzione a questo problema se non crearne uno mio HashSet<T>
o utilizzare un file Dictionary<K, V>
. Qualche altra idea?
Nota:
non voglio controllare se HashSet<T>
contiene l'elemento. Voglio ottenere il riferimento all'elemento memorizzato in HashSet<T>
perché ho bisogno di aggiornarlo (senza sostituirlo con un'altra istanza). L'oggetto a cui passerei TryGetItem
sarebbe uguale (secondo il meccanismo di confronto che ho passato al costruttore) ma non sarebbe lo stesso riferimento.