67 votes

Comment utiliser la méthode HashSet<string>.Contains() en mode insensible à la casse ?

Mode d'emploi HashSet<string>.Contains() en mode insensible à la casse ?

113voto

João Angelo Points 24422

Vous pouvez créer le HashSet avec un comparateur personnalisé :

HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

hs.Add("Hello");

Console.WriteLine(hs.Contains("HeLLo"));

10voto

Kobi Points 65357

Vous devez le créer avec le bon IEqualityComparer :

HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);

6voto

Anthony Pegram Points 58528

Ce n'est pas nécessaire ici, comme d'autres réponses l'ont démontré, mais dans d'autres cas où vous n'utilisez pas une chaîne de caractères, vous pouvez choisir d'implémenter une fonction IEqualityComparer<T> et ensuite vous pouvez utiliser un .Contains surcharge. Voici un exemple utilisant une chaîne de caractères (là encore, d'autres réponses ont montré qu'il existe déjà un comparateur de chaînes de caractères que vous pouvez utiliser et qui répond à vos besoins). De nombreuses méthodes entourant IEnumerable<T> ont des surcharges qui acceptent de tels comparateurs, il est donc bon d'apprendre à les mettre en œuvre.

class CustomStringComparer : IEqualityComparer<string>
{
    public bool Equals(string x, string y)
    {
        return x.Equals(y, StringComparison.InvariantCultureIgnoreCase);
    }

    public int GetHashCode(string obj)
    {
        return obj.GetHashCode();
    }
}

Et ensuite l'utiliser

bool contains = hash.Contains("foo", new CustomStringComparer());

5voto

Thibault Falise Points 2876

Vous devez utiliser le Constructeur qui vous permet de spécifier le IEqualityComparer que vous voulez utiliser.

HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);

En Comparateur de chaînes fournit certains comparateurs souvent utilisés comme propriétés statiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X