因此,我在scala Map[Int, Map[String, Double]]
中有一个嵌套的映射,需要在外部映射上迭代,对于每个int,必须检查内部map的键集是否包含特定的字符串。如果不是,我必须在那个点中断,并返回包含失败的外部映射的其他键。
例如。
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
发布于 2019-09-19 22:32:38
一个很好的选择是使用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)
发布于 2019-09-19 21:06:43
我需要迭代外部地图.在那一点上中断
Map是一个集合,具有.find()
。
找到满足谓词的集合的第一个元素(如果有的话)。
(请注意,映射的“元素”是元组(key, value)
,需要_2
才能到达内部映射)。
里面的谓词是
检查内部映射的键集是否包含特定的字符串
那是.contains()
。
测试此映射是否包含键的绑定。
将其组合在一起,并添加_1
以获取未通过内部映射测试的密钥:
myMap.find(_._2.contains("particular string")).map(_._1)
发布于 2019-09-19 22:33:03
您可以使用dropWhile
val 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 )))
var missingValue = myMap.dropWhile(_._2.contains("b")).headOption
https://stackoverflow.com/questions/58021904
复制