繁体   English   中英

在Scala中的地图列表/向量中查找地图

[英]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)将不起作用,因为containsMap覆盖以检查密钥,即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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM