如何检查Map中是否存在键或值?

我有一个斯卡拉地图,并想testing是否存在一个特定的值在地图上。

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

有几种不同的select,取决于你的意思。

如果你的意思是“价值” 键值对 ,那么你可以使用类似的东西

 myMap.exists(_ == ("fish",3)) myMap.exists(_ == "fish" -> 3) 

如果你指的是键值对的值 ,那么你可以

 myMap.values.exists(_ == 3) myMap.exists(_._2 == 3) 

如果你只想testing键值对的关键字 ,那么

 myMap.keySet.exists(_ == "fish") myMap.exists(_._1 == "fish") myMap.contains("fish") 

请注意,尽pipe元组的forms(例如_._1 == "fish" )最终缩短了,但稍长一些的forms对于您想要发生的事情更为明确。

你想知道地图上的值是否存在,或者是否存在? 如果你想检查密钥,使用isDefinedAt

 myMap isDefinedAt key 

你提供了一个testing,其中一个地图值将通过,即

 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说“testing一个谓词是否适用于这个不可变映射的某些元素”,这个问题是它接收一个元组(key,value)而不是两个参数。

那这个呢:

 val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd') map.values.toSeq.contains('c') //false 

如果map包含c值,则返回true

如果你坚持使用exists

 map.exists({case(_, value) => value == 'c'}) 

根据上面的回答,请注意exists()比contains()(我用包含5000个string键的Map进行基准testing,比率是一致的x100)要慢很多。 我相对比较新的斯卡拉,但我的猜测是存在()遍历所有键(或键,值tupple),而包含使用地图的随机访问