【发布时间】:2018-01-19 08:16:56
【问题描述】:
我有以下Array[Int]:val array = Array(1, 2, 3),为此我有以下Int和String之间的映射关系:
val a1 = array.map{
case 1 => "A"
case 2 => "B"
case 3 => "C"
}
要创建一个Map 来包含上述映射关系,我知道我可以使用foldLeft 方法:
val a2 = array.foldLeft(Map[String, Int]()) { (m, e) =>
m + (e match {
case 1 => ("A", 1)
case 2 => "B" -> 2
case 3 => "C" -> 3
})
}
哪个输出:
a2: scala.collection.immutable.Map[String,Int] = Map(A -> 1, B -> 2, C -> 3)
这就是我想要的结果。 但是我可以通过map 方法获得相同的结果吗?
以下代码不起作用:
val a3 = array.map[(String, Int), Map[String, Int]] {
case 1 => ("A", 1)
case 2 => ("B", 2)
case 3 => ("C", 3)
}
map的签名是
def map[B, That](f: A => B)
(implicit bf: CanBuildFrom[Repr, B, That]): That
这是什么CanBuildFrom[Repr, B, That]?我试图阅读Tribulations of CanBuildFrom,但并不真正理解它。那篇文章提到 Scala 2.12+ 为 map 提供了两个实现。但是为什么我在使用 Scala 2.12.4 的时候没有找到呢?
我主要使用 Scala 2.11.12。
【问题讨论】:
标签: scala functional-programming