J'ai une carte scala et je voudrais tester si une certaine valeur existe dans la carte.
myMap.exists( /*What should go here*/ )
J'ai une carte scala et je voudrais tester si une certaine valeur existe dans la carte.
myMap.exists( /*What should go here*/ )
Il existe plusieurs options différentes, selon ce que vous voulez dire.
Si vous entendez par "valeur" paire clé-valeur alors vous pouvez utiliser quelque chose comme
myMap.exists(_ == ("fish",3))
myMap.exists(_ == "fish" -> 3)
Si vous voulez dire valeur de la paire clé-valeur alors vous pouvez
myMap.values.exists(_ == 3)
myMap.exists(_._2 == 3)
Si vous vouliez juste tester la clé de la paire clé-valeur alors
myMap.keySet.exists(_ == "fish")
myMap.exists(_._1 == "fish")
myMap.contains("fish")
Notez que, bien que les formes de tuple (par ex. _._1 == "fish"
) finissent par être plus courts, les formulaires légèrement plus longs sont plus explicites sur ce que vous voulez qu'il se passe.
Vous fournissez un test que l'une des valeurs de la carte passera, c'est à dire
val mymap = Map(9->"lolo", 7->"lala")
mymap.exists(_._1 == 7) //true
mymap.exists(x => x._1 == 7 && x._2 == "lolo") //false
mymap.exists(x => x._1 == 7 && x._2 == "lala") //true
Les ScalaDocs disent de la méthode "Tests whether a predicate holds for some of the elements of this immutable map.", le problème est qu'elle reçoit un tuple (key, value) au lieu de deux paramètres.
Selon les réponses ci-dessus, notez que exists() est significativement plus lent que contains() (j'ai fait un benchmark avec une Map contenant 5000 clés de chaînes, et le ratio était constamment de x100). Je suis relativement nouveau en Scala mais je pense que exists() itère sur toutes les clés (ou key,value tupple) alors que contains utilise l'accès aléatoire de Map.
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.