11

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

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))

4

3 回答 3

20
List(2, 4, 6, 8, 10).zipWithIndex.map(_.swap).toMap
于 2013-07-24T08:10:11.677 回答
18
val xs = List(2, 4, 6, 8, 10)
(xs.indices zip xs).toMap
// Map(0 -> 2, 1 -> 4, 2 -> 6, 3 -> 8, 4 -> 10)
于 2013-07-24T08:11:14.030 回答
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))
于 2013-07-24T08:10:24.230 回答