如何检查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),而包含使用地图的随机访问