2016-06-07 66 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]]。 –

相關問題