J'ai une carte scala et je voudrais tester si une certaine valeur existe dans la carte.
myMap.exists( /*What should go here*/ )
scala
dictionary
collections
Nabegh
la source
la source
Voulez-vous savoir si la valeur existe sur la carte ou la clé? Si vous souhaitez vérifier la clé, utilisez
isDefinedAt
:la source
vous fournissez un test que l'une des valeurs de la carte réussira, c.-à-
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.", Le problème est qu'il reçoit un tuple (clé, valeur) au lieu de deux paramètres.
la source
Et ça:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd') map.values.toSeq.contains('c') //false
Rend
true
si la carte contient unec
valeur.Si vous insistez pour utiliser
exists
:map.exists({case(_, value) => value == 'c'})
la source
values
crée un nouveauIterable
donc vous êtes probablement mieux avecmap.valuesIterator.contains('c')
(même si ce n'est pas aussi facile quemap.exists(_._2 == 'c')
!)Pour les réponses ci-dessus, notez qu'exist () est nettement plus lent que contains () (j'ai comparé avec une carte contenant 5000 clés de chaîne, et le rapport était un x100 cohérent). Je suis relativement nouveau dans scala mais je suppose qu'il existe () itère sur toutes les clés (ou clé, valeur tupple) alors que contient utilise l'accès aléatoire de Map
la source