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.

25voto

Kevin McCormick Points 1429

Vous pouvez utiliser LINQ pour ce faire.

Voici deux exemples :

bool anyStartsWith = mydict.Keys.Any(k => k.StartsWith("key1"))

bool anyContains = mydict.Keys.Any(k => k.Contains("key1"))

Il convient de souligner que cette méthode est moins performante que la méthode .ContainsKey, mais en fonction de vos besoins, l'impact sur les performances ne sera pas perceptible.

4voto

Stefan Points 8183
mydict.Keys.Any(k => k.StartsWith("key1"));

Tout en énumérant les Keys vous perdrez les avantages d'un dictionnaire en termes de performances :

mydict.ContainsKey(someKey); // O(1)
mydict.Keys.Any(k => k.StartsWith("key1")); // O(n)

1voto

zellio Points 8863

Si vous exécutez le .Contains() de la chaîne et non du dictionnaire, vous obtiendrez ce que vous voulez.

var matchingKeys = mydict.Keys.Where(x => x.Contains("key1"));

0voto

Haris Hasan Points 17497
var keys = (from key mydict.keys where key.contains(keyName) select key).ToList();

0voto

Tetsujin no Oni Points 3646

Le membre Keys du dictionnaire peut être manipulé pour vérifier la présence avec une sémantique plus compliquée que l'égalité. Il n'est pas nécessaire qu'il s'agisse d'une méthode d'extension LINQ, mais c'est probablement la plus simple.

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