Tengo un mapa scala y me gustaría probar si existe un cierto valor en el mapa.
myMap.exists( /*What should go here*/ )
scala
dictionary
collections
Nabegh
fuente
fuente
¿Quieres saber si el valor existe en el mapa o la clave? Si desea verificar la clave, use
isDefinedAt
:fuente
proporciona una prueba de que pasará uno de los valores del mapa, es decir
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
Los ScalaDocs dicen sobre el método "Prueba si un predicado es válido para algunos de los elementos de este mapa inmutable", el problema es que recibe una tupla (clave, valor) en lugar de dos parámetros.
fuente
¿Qué pasa con esto?
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd') map.values.toSeq.contains('c') //false
Rinde
true
si el mapa contienec
valor.Si insiste en usar
exists
:map.exists({case(_, value) => value == 'c'})
fuente
values
crea una nueva,Iterable
por lo que probablemente esté mejor conmap.valuesIterator.contains('c')
(¡aunque eso no es tan fácil comomap.exists(_._2 == 'c')
!)De acuerdo con las respuestas anteriores, tenga en cuenta que existe () es significativamente más lento que contiene () (lo comparé con un mapa que contiene 5000 claves de cadena, y la proporción fue constante x100). Soy relativamente nuevo en scala, pero supongo que existe () está iterando sobre todas las claves (o clave, valor tupple) mientras que contiene utiliza el acceso aleatorio de Map
fuente