【发布时间】:2015-04-30 10:03:00
【问题描述】:
我尝试使用 Map.map 将地图转换为元组列表。 然而这失败了。我做了以下实验:
val m = Map(("a" -> 1), ("b" -> 2))
//> m : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r1 = m.map{ case (k,v) => v} //> r1 : scala.collection.immutable.Iterable[Int] = List(1, 2)
def toTuple[A,B](a:A,b:B) = (a,b) //> toTuple: [A, B](a: A, b: B)(A, B)
//val r2: List[Tuple2[_,_]] = m.map(e => (e._1,e._2))
val r3 = m.map(e => toTuple(e._1,e._2)) //> r3 : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r4 = m.toSeq //> r4 : Seq[(String, Int)] = ArrayBuffer((a,1), (b,2))
请注意如何为单个元素 (r1) 生成 List,但为元组 (r3) 生成 Map。甚至没有强制类型工作(r2)。只有对 Seq 的显式调用(r4)所以我的问题是,为什么/如何 Map.map “自动”创建一个新 Map 而不是一个列表?其实返回类型是如何确定的(Seq、List等)
【问题讨论】:
-
m.toList有什么问题?另请注意,集合上的映射会返回相同类型的另一个集合,因此您不能真正返回Map上的列表映射,除非您在其上调用.toList。 -
@Ende - 没有错。请参阅下面的评论。
标签: list scala dictionary tuples seq