【问题标题】:Scala - How to concat values from multiple keys in a mapScala - 如何连接地图中多个键的值
【发布时间】:2020-09-24 19:54:49
【问题描述】:

我想编写一个接受List[String]Map[String,List[Int]]的函数。
如果键存在于地图中,我想遍历字符串列表并获取值。
我已经有了这个:

def getIntList(search_keys: List[String], mapped: Map[String, List[Int]]): List[Int] =
    for ((k:String,v:List[Int]) <- mapped if search_keys.contains(k)) yield {
      v
    }

此函数不会按预期返回List[Int],而是返回Iterable[List[Int]]
我已经尝试在 for 循环之后变平,但这没有用。 我想我无法理解循环中返回的内容。也许有更好的方法来做到这一点?
任何帮助都非常感谢。

【问题讨论】:

    标签: scala functional-programming yield


    【解决方案1】:

    试试l.flatMap(m.get).flatten,例如

    val l = List("a", "c")
    val m = Map("a" -> List(1,2), "b" -> List(3,4), "c" -> List(5,6))
    
    l.flatMap(m.get).flatten
    // res0: List[Int] = List(1, 2, 5, 6)
    

    其中m.get 返回Option[List[Int]] 所以我们实际上必须展平两次才能到达Ints

    【讨论】:

    • 哇,这比我的尝试简单多了。我想我应该再次研究 flatMap 。还有一个问题。这种尝试是否有可能过滤所有键都存在的值?
    • 另外,你可以试试l.flatMap(k =&gt; m.getOrElse(k, default = List.empty))
    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 2022-01-11
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多