[英]Finding a map in list/vector of maps in Scala
我有一个向量/地图列表( Map[String,Int]
)。 如何使用.find
在地图列表中.find
这些地图之一中是否存在键值对?
val res = List(Map("1" -> 1), Map("2" -> 2)).find(t => t.exists(j => j == ("2", 2)))
println(res)
使用find
with exists
检查地图中是否存在。
chengpohi的解决方案效率很低,而且与我对问题的理解方式也有所不同。
令m: Map[String,Int]
。
首先,使用m.exists(j => j == ("2",2))
,也可以写成m.contains("2" -> 2)
查看m
每个条目,而m("2").toSeq.contains(2)
仅执行一次地图查找。 请注意, m.contains("2" -> 2)
将不起作用,因为contains
被Map
覆盖以检查密钥,即m.contains("2")
有效,而且速度很快。
要获得与chengpoi相同的结果,但要有效:
def mapExists[K,V](ms: List[Map[K,V]], k: K, v: V): Option[(K,V)] =
ms.get(k).filter(_ == v).map(_ => k -> v)
请注意,此方法返回其参数,这是非常多余的。
其次,我将问题理解为检查List
是否包含具有特定对的Map
。 这将转化为
def mapExists[K,V](ms: List[Map[K,V]], k: K, v: V): Boolean =
ms.exists(_.get(k).contains(v))
即使这样,也可以只使用我们感兴趣的键值来完成:
scala> val res = List(Map("A" -> 10), Map("B" -> 20)).find(_.keySet.contains("B"))
res: Option[scala.collection.immutable.Map[String,Int]] = Some(Map(B -> 20))
scala>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.