У меня есть карта scala и я хочу проверить, существует ли какое-то значение на карте.
myMap.exists( /*What should go here*/ )
У меня есть карта scala и я хочу проверить, существует ли какое-то значение на карте.
myMap.exists( /*What should go here*/ )
В зависимости от того, что вы имеете в виду, существует несколько различных параметров.
Если вы имеете в виду пару "значение" ключ-значение, вы можете использовать что-то вроде
myMap.exists(_ == ("fish",3))
myMap.exists(_ == "fish" -> 3)
Если вы имеете в виду значение пары ключ-значение, вы можете
myMap.values.exists(_ == 3)
myMap.exists(_._2 == 3)
Если вы хотите просто проверить ключ пары ключ-значение, то
myMap.keySet.exists(_ == "fish")
myMap.exists(_._1 == "fish")
myMap.contains("fish")
Обратите внимание, что хотя формы кортежей (например, _._1 == "fish"
) заканчиваются короче, несколько более длинные формы более четко выражают то, что вы хотите выполнить.
Вы хотите знать, существует ли значение на карте или ключ? Если вы хотите проверить ключ, используйте isDefinedAt
:
myMap isDefinedAt key
вы предоставляете проверку того, что одно из значений карты пройдет, т.е.
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'})
В ответах выше обратите внимание, что exists() значительно медленнее, чем contains() (я сравнивал с картой, содержащей 5000 строковых ключей, и соотношение было согласованным x100). Я относительно новичок в scala, но мое предположение существует() итерирует все ключи (или ключ, значение tupple), тогда как содержит использование случайного доступа к карте