15 votes

Comment faire un "like" sur une clé de dictionnaire ?

Comment faire un "like" pour trouver une clé de dictionnaire ? Je fais actuellement :

mydict.ContainsKey(keyName);

Mais certains noms de clés ont un mot supplémentaire ajouté (séparé par un espace), j'aimerais faire un "like" ou .StartsWith(). Les comparaisons ressembleront à ceci :

"key1" == "key1"  //match
"key1" == "key1 someword" //partial match

J'ai besoin de correspondre dans les deux cas.

0voto

kd7 Points 16740

Si vous voulez les clés elles-mêmes et non un vrai/faux, vous pouvez le faire :

string match = "key1";

    var matches = from k in mydict
                      where k.Key.Contains(match)
                      select new
                      {
                          k.Key
                      };

0voto

jlafay Points 4670

Pour faire correspondre et récupérer des clés "comme", vous pouvez utiliser ces extensions.

public static class Extensions
{
    public static bool HasKeyLike<T>(this Dictionary<string, T> collection, string value)
    {
        var keysLikeCount = collection.Keys.Count(x => x.ToLower().Contains(value.ToLower()));
        return keysLikeCount > 0;
    }

    public static List<string> GetKeysLike<T>(this Dictionary<string, T> collection, string value)
    {
        return collection.Keys.Select(x => x.ToLower().Contains(value.ToLower())).ToList();
    }
}

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