У мене є карта масштабу і я хотів би перевірити, чи існує на карті певне значення.
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'})
values
створює нову, Iterable
щоб вам, мабуть, було краще map.valuesIterator.contains('c')
(хоча це не так просто, як map.exists(_._2 == 'c')
!)
Згідно з наведеними вище відповідями, зауважте, що існує () значно повільніше, ніж містить () (я тестував карту, що містить 5000 рядкових ключів, і співвідношення було стабільним x100). Я відносно новачок у Scala, але, припускаю, існує () перебирає всі ключі (або ключ, значення tupple), тоді як містить випадковий доступ Map