2016-06-07 100 views
0

我有一个斯卡拉列表的列表,看起来像这样:List(List(1, 5, 6, 10), List(1, 6), List(1, 3, 10),我想转换 它到一个HashMap[Int, List[Int]]其中第一个Int是索引每个列表和List[Int]是列表本身。到底应该HashMap的 样子List到HashMap列表[List of List] - > List - Scala

HashMap[Int, List[Int]](
     0 -> List(1, 5, 6, 10), 
     1 -> List(1, 6), 
     2 -> List (1, 3, 10),) 

这里是我的方法,有一个列表0到列表的长度和与此嵌套列表压缩它,然后以某种方式 其转换成一个HashMap。但我正在寻找更多地道或整洁的东西。有任何想法吗?

回答

3

一个zipWithIndexmap应该这样做:

scala> val a = List(List(1, 5, 6, 10), List(1, 6), List(1, 3, 10)) 
a: List[List[Int]] = List(List(1, 5, 6, 10), List(1, 6), List(1, 3, 10)) 

scala> a.zipWithIndex.map(_.swap).toMap 
res0: scala.collection.immutable.Map[Int,List[Int]] = 
Map(
    0 -> List(1, 5, 6, 10), 
    1 -> List(1, 6), 
    2 -> List(1, 3, 10) 
) 

编辑:

如果你绝对需要一个HashMap,事情有点混乱:

scala> val a = List(List(1, 5, 6, 10), List(1, 6), List(1, 3, 10)) 
a: List[List[Int]] = List(List(1, 5, 6, 10), List(1, 6), List(1, 3, 10)) 

scala> val b = a.zipWithIndex.map(_.swap) 
b: List[(Int, List[Int])] = List((0,List(1, 5, 6, 10)), (1,List(1, 6)), (2,List(1, 3, 10))) 

scala> val hM = collection.immutable.HashMap[Int, List[Int]](b: _*) 
hM: scala.collection.immutable.HashMap[Int,List[Int]] = 
Map(
    0 -> List(1, 5, 6, 10), 
    1 -> List(1, 6), 
    2 -> List(1, 3, 10) 
) 
+2

使用'_ .swap'而不是'x =>(x._2,x._1)' – Kolmar

+0

新增,我必须记住! –

+0

非常好。有什么办法将它转换成一个HashMap而不是一个Map。我的函数抱怨期望的HashMap [Int,List [Int]],actual:Map [Int,List [Int]]。 –

相关问题