我有一个 scala 地图,想测试地图中是否存在某个值。
myMap.exists( /*What should go here*/ )
我有一个 scala 地图,想测试地图中是否存在某个值。
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
如果maptrue
包含c
值,则产生。
如果您坚持使用exists
:
map.exists({case(_, value) => value == 'c'})
根据上面的答案,请注意 exists() 比 contains() 慢得多(我使用包含 5000 个字符串键的 Map 进行了基准测试,并且比率是一致的 x100)。我对 scala 比较陌生,但我的猜测是 exists() 遍历所有键(或键、值元组),而 contains 使用 Map 的随机访问