У меня есть карта scala, и я хотел бы проверить, существует ли на ней определенное значение.
myMap.exists( /*What should go here*/ )
scala
dictionary
collections
Набег
источник
источник
Вы хотите знать, существует ли значение на карте или ключ? Если вы хотите проверить ключ, используйте
isDefinedAt
:источник
вы предоставляете тест, который проходит одно из значений карты, т.е.
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 говорится о методе «Проверяет, выполняется ли предикат для некоторых элементов этой неизменяемой карты». Загвоздка в том, что он получает кортеж (ключ, значение) вместо двух параметров.
источник
Как насчет этого:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd') map.values.toSeq.contains('c') //false
Урожайность,
true
если карта содержитc
значение.Если вы настаиваете на использовании
exists
:map.exists({case(_, value) => value == 'c'})
источник
values
создает новый,Iterable
так что вам, вероятно, будет лучшеmap.valuesIterator.contains('c')
(хотя это не так простоmap.exists(_._2 == 'c')
!)В ответах выше обратите внимание, что exists () значительно медленнее, чем contains () (я сравнивал с картой, содержащей 5000 строковых ключей, и соотношение было постоянным x100). Я относительно новичок в scala, но я предполагаю, что существует () итерация по всем ключам (или ключ, значение tupple), тогда как содержит использует произвольный доступ карты
источник