J'ai lu cette question sur la raison pour laquelle il n'est pas possible, mais je n'ai pas trouvé de solution au problème.
J'aimerais récupérer un élément d'un HashSet
. Je cherche une méthode qui aurait cette signature :
///
/// Détermine si cet ensemble contient un élément égal à ,
/// selon le mécanisme de comparaison utilisé lors de la création de l'ensemble.
/// L'ensemble n'est pas modifié. Si l'ensemble contient un élément égal à
/// , alors l'élément de l'ensemble est renvoyé.
///
bool TryGetItem(T item, out T foundItem);
Rechercher l'élément dans un ensemble avec une telle méthode serait en O(1). La seule façon de récupérer un élément d'un HashSet
est d'énumérer tous les éléments, ce qui est en O(n).
Je n'ai trouvé aucun contournement à ce problème autre que de créer mon propre HashSet
ou d'utiliser un Dictionary
. Une autre idée ?
Remarque :
Je ne veux pas vérifier si le HashSet
contient l'élément. Je veux obtenir la référence de l'élément stocké dans le HashSet
car j'ai besoin de le mettre à jour (sans le remplacer par une autre instance). L'élément que je passerais à TryGetItem
serait égal (selon le mécanisme de comparaison que j'ai passé au constructeur) mais il ne s'agirait pas de la même référence.