Подтвердить что ты не робот

Как проверить, существует ли ключ или значение на карте?

У меня есть карта scala и я хочу проверить, существует ли какое-то значение на карте.

myMap.exists( /*What should go here*/ )
4b9b3361

Ответ 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), тогда как содержит использование случайного доступа к карте