【问题标题】:Scala: List of Option tuples in a mapScala:地图中的选项元组列表
【发布时间】:2017-04-08 15:10:31
【问题描述】:

我有一个值列表,可能是None

val list = List(("apples",1), ("oranges",3), ("avocado",4), None, ("pears",10))

我怎样才能把它变成像这样的地图:

Map("apples"->1, "oranges"->3, "avocado"->4, "pears"->10)

跳过空元素?

我不能使用toMaplist,因为它给了我错误:

错误:无法证明 Option[(String, Int)] <: u>

我在想这样的事情:

val m = list.map(x => x match{case Some(x) => x._1->x._2 
case None => None})

但显然我错过了一些东西:(

【问题讨论】:

  • filter它。 map 发送到 tuple。致电toMap?
  • 将它映射到一个元组,这不是我需要的。我无法调用 toMap(我更新了问题以提供有关此问题的更多见解)。 filter 实际上是个好主意。 :) 我试试看
  • 你能举个例子吗?
  • 问题是 List 类型是 Any 而不是 (String, Int) 或 Option[(String, Int)]。首先确保类型正确。你不能把元组变成 Some 吗?然后 flatten 可能会起作用。

标签: scala


【解决方案1】:

试试这个:

list.collect{case (k,v) => (k,v)}.toMap

【讨论】:

    【解决方案2】:

    您可以在列表中执行.flatten 以仅获取非None 元素,执行.toMap

    list  // : List[Option[(String,Int)]]
      .flatten // : List[(String,Int)]
      .toMap //: Map[String, Int]
    

    【讨论】:

    • flatten 不起作用,因为原始列表不是 List[Option[(String, Int)]]
    • 错误信息暗示它是:错误:无法证明 Option[(String, Int)] <: u>
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多