Tenho um scala Map e gostaria de testar se um determinado valor existe no mapa.
myMap.exists( /*What should go here*/ )
scala
dictionary
collections
Nabegh
fonte
fonte
Você quer saber se o valor existe no mapa, ou a chave? Se você quiser verificar a chave, use
isDefinedAt
:fonte
você fornece um teste em que um dos valores do mapa passará, ou seja,
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
Os ScalaDocs dizem do método "Testa se um predicado é válido para alguns dos elementos deste mapa imutável.", O problema é que ele recebe uma tupla (chave, valor) em vez de dois parâmetros.
fonte
Que tal isso:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd') map.values.toSeq.contains('c') //false
Rende
true
se o mapa contiverc
valor.Se você insiste em usar
exists
:map.exists({case(_, value) => value == 'c'})
fonte
values
cria um novoIterable
para que você provavelmentemap.valuesIterator.contains('c')
fique melhor (embora não seja tão fácil quantomap.exists(_._2 == 'c')
!)De acordo com as respostas acima, observe que existe () é significativamente mais lento do que contém () (eu fiz benchmarking com um Mapa contendo 5000 chaves de string e a proporção era um x100 consistente). Sou relativamente novo em scala, mas acho que existe () está iterando em todas as chaves (ou chave, valor tupple), enquanto contém usa o acesso aleatório de Map
fonte