J'ai un scala Map) et voudrais tester si une certaine valeur existe dans la carte.
myMap.exists( /*What should go here*/ )
Il y a plusieurs options différentes, en fonction de ce que vous voulez dire.
Si vous voulez dire 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 simplement 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 exemple, _._1 == "fish"
) finissent par être plus courts, les formes légèrement plus longues sont plus explicites sur ce que vous voulez que se passe.
Voulez-vous savoir si la valeur existe sur la carte ou sur la clé? Si vous voulez vérifier la clé, utilisez isDefinedAt
:
myMap isDefinedAt key
vous fournissez un test indiquant que l'une des valeurs de la carte va passer, 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 "Teste si un prédicat est valable pour certains des éléments de cette carte immuable.".
Et ça:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c') //false
Rend true
si la carte contient la valeur c
.
Si vous insistez pour utiliser exists
:
map.exists({case(_, value) => value == 'c'})
Selon les réponses ci-dessus, notez que exist () est nettement plus lent que conte () (j'ai déjà comparé avec une carte contenant 5 000 clés de chaîne et le rapport était un x100 cohérent). Je suis relativement nouveau sur scala mais je suppose qu'il existe () itère sur toutes les clés (ou la clé, la valeur tupple) alors qu'il contient utilise l'accès aléatoire de Map