【问题标题】:In Scala, how to check if a Map contains all entries from another Map?在 Scala 中,如何检查一个 Map 是否包含另一个 Map 的所有条目?
【发布时间】:2014-10-01 02:08:38
【问题描述】:

新问题总数。假设我有 2 张地图

val map1 = Map("ram"->"2gb", "size"->"15", "color"->"red", "fruit"->"strawberry")
val map2 = Map("ram"->"2gb", "size"->"15", "color"->"red")

我想知道 map1 完全 是否包含 map2(map1 中的额外键/值可以),有什么好的 Scala 方法可以做到这一点?

我能想到的最好的办法就是创建自己的函数:

def doesMapContainMap(map1: Map[_,_], map2: Map[_,_]): Boolean = {
  var matchCount: Int = 0
  map2 foreach {
    entry => {
      if (map1.exists(x => x._1 == entry._1 && x._2 == entry._2)) {
        matchCount += 1;
      }
    }
  }
  // true if the number of matches is equal to the number of elements in map2
  map2.size == matchCount
}

这可行(我认为),但我想知道是否有更好的方法。

【问题讨论】:

    标签: scala map scala-collections


    【解决方案1】:

    您可以将Map 转换为Set,然后应用subsetOf 方法。

    val map1 = Map("ram"->"2gb", "size"->"15", "color"->"red", "fruit"->"strawberry")
    val map2 = Map("ram"->"2gb", "size"->"15", "color"->"red")
    
    map2.toSet subsetOf map1.toSet // res0: Boolean = true
    

    【讨论】:

      【解决方案2】:

      如果您不想复制您的收藏,

      map2.forall{ case (k,v) => map1.get(k).exists(_ == v) }
      

      您检查map2 中的所有内容,方法是在map1 中查找键,返回一个选项,然后检查该值是否存在以及它应该是什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-30
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        相关资源
        最近更新 更多