首页 > 解决方案 > 如何在Scala中打破地图并在断点处保存密钥

问题描述

所以我在 scala 中有一个嵌套映射,Map[Int, Map[String, Double]]需要遍历外部映射,并且每个 int 必须检查内部映射的键集是否包含特定字符串。如果不是,我必须在该点中断并返回包含失败的关键 other f 外部映射

例如

  myMap = Map( (1, Map ("a" -> 13.0,"b" ->12.0 )),(2, Map ("a"-> 12.0, "b"-> 13.0)), (3, Map ("a" -> 11.0,"c" ->12.0 )),(4, Map ("e" -> 11.0,"d" ->12.0 )))

我想要第一次出现内部地图没有 key = b 所以基本上我上面的输出应该是 3

标签: scala

解决方案


一个不错的选择是使用collectFirst

myMap.collectFirst { case (k, v) if !v.contains("b") => k }

Option[Int]这会Some(3)在您的示例中返回。如果None地图中所有元素的测试都失败了


这是您评论中附加问题的解决方案:

val testKeys = List("a", "b", "c").toSet

myMap.collectFirst { case (k, v) if !v.keys.forall(testKeys.contains) => k }

这给Some(4)


推荐阅读