A HashSet<T>
può determinare in O (1) se contiene un determinato elemento. Se sovrascrivo Equals()
e GetHashCode()
sulla mia classe personalizzata, posso avere un oggetto A e un altro oggetto A' che sono non uguale per identità, ma per i quali Equals()
rendimenti true
e GetHashCode()
restituisce lo stesso codice hash.Ottenere un oggetto uguale da HashSet <T> in O (1)
Ora, dato che A è nel set di hash, voglio recuperare A in O (1) dato A '(che è uguale ad A dal punto di vista dell'hash set).
var a = new MyClass("A");
var a_prime = new MyClass("A");
Debug.Assert(a.Equals(a_prime));
Debug.Assert(a.GetHashCode() == a_prime.GetHashCode());
var set = new HashSet<MyClass>();
set.Add(a);
Debug.Assert(set.Contains(a_prime));
// This:
var retrieved_a = set.Get(a_prime);
Come fare?
(Si noti che this non ha la risposta che sto cercando, e this non ha risposte a tutti.)
Alcune informazioni di base: Voglio utilizzare il set per stagista mia oggetti allo stesso modo C# interns stringhe: gli oggetti uguali hanno bisogno di una sola istanza. In questo modo posso aggiungere i metadati a un tale oggetto ed essere sicuro che non ci siano altre istanze uguali ovunque senza i metadati.
Perché non utilizzare solo un dizionario che associa il 'A' a' A'? –
possibile duplicato di [Come recuperare l'elemento effettivo da HashSet?] (Http://stackoverflow.com/questions/7760364/how-to-retrieve-actual-item-from-hashsett) –
nawfal
Un altro [come accedere -le-riferimento valori-di-un-hashset-senza-censimento?] (http://stackoverflow.com/questions/7290443/how-to-access-the-reference-values-of-a-hashsettvalue-without -enumerazione?) – nawfal