Mam mapę scala i chciałbym sprawdzić, czy na mapie istnieje określona wartość.
myMap.exists( /*What should go here*/ )
scala
dictionary
collections
Nabegh
źródło
źródło
Chcesz wiedzieć, czy wartość istnieje na mapie, czy klucz? Jeśli chcesz sprawdzić klucz, użyj
isDefinedAt
:źródło
podajesz test, że jedna z wartości mapy przejdzie, tj
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
ScalaDocs mówi o metodzie „Testuje, czy predykat jest zachowany dla niektórych elementów tej niezmiennej mapy”. Połów jest taki, że zamiast dwóch parametrów otrzymuje krotkę (klucz, wartość).
źródło
A co z tym:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd') map.values.toSeq.contains('c') //false
Zyski,
true
jeśli mapa zawierac
wartość.Jeśli nalegasz na używanie
exists
:map.exists({case(_, value) => value == 'c'})
źródło
values
tworzy nowy,Iterable
więc prawdopodobnie lepiej ci będzie zmap.valuesIterator.contains('c')
(chociaż to nie jest tak prostemap.exists(_._2 == 'c')
!)Zgodnie z powyższymi odpowiedziami, zauważ, że istnieje () jest znacznie wolniejszy niż zawiera () (porównałem z Mapą zawierającą 5000 kluczy ciągów, a stosunek był spójny x100). Jestem stosunkowo nowy w scali, ale przypuszczam, że istnieje () iteruje po wszystkich kluczach (lub klucz, krotka wartości), podczas gdy zawiera używa losowego dostępu Map
źródło