将Scala列表转换为带有索引作为键的映射

时间:2013-07-24 08:08:36

标签: list scala collections map

我想做的就是转换以下内容:

List(2, 4, 6, 8, 10)Map(0 -> 2, 1 -> 4, 2 -> 6, 3 -> 8, 4 -> 10 )。换句话说,将索引映射到值。它应该很容易,但我遗漏了一些东西。

有人能建议一种简单的方法吗?

UPD:只是为了推广解决方案。假设我需要执行额外的值转换。例如,用List(_)包装它。在我们的案例中:

List(2, 4, 6, 8, 10) - > Map(0 -> List(2), 1 -> List(4), 2 -> List(6), 3 -> List(8), 4 -> List(10))

3 个答案:

答案 0 :(得分:16)

List(2, 4, 6, 8, 10).zipWithIndex.map(_.swap).toMap

答案 1 :(得分:14)

val xs = List(2, 4, 6, 8, 10)
(xs.indices zip xs).toMap
// Map(0 -> 2, 1 -> 4, 2 -> 6, 3 -> 8, 4 -> 10)

答案 2 :(得分:5)

UPD:如果您想要转化价值,您可以使用已发布的解决方案之一,然后使用地图mapValues或您可以预先应用转换:

List(2, 4, 6, 8, 10).zipWithIndex.map { case (v, i) => i -> List(v) }.toMap
res0: Map[Int,List[Int]] = Map(0 -> List(2), 1 -> List(4), 2 -> List(6), 3 -> List(8), 4 -> L
ist(10))