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