2014-12-29 75 views
0

下面樣本數據Scala的組通過列表的列表,並減去分組值

val combineList = List(("A",12),("B",11),("C",12),("D",14),("E",23),("F",12),("D",53),("C",23),("B",12),("A",22),("E",21),("F",12),("C",21),("B",34),("A",34),("G",67),("D",23),("E",21),("F",12),("D",31),("B",41),("E",14),("F",15),("G",18),("A",11),("C",10),("D",9),("A",13),("E",1),("F",14)) 

val X = 98 

現在要如下最終輸出,

通過所有值第一組如下

val groupKey = List(Map("A"->List(12,22,34,11,13)),Map("B"->List(11,12,34,41)),Map("C"->List(12,23,21,10)),Map("D"->List(14,53,23,31,9)), 
Map("E"->List(23,21,21,14,1)),Map("F"->List(12,12,12,15,14)),Map("G"->List(67,18))) 

山高第二,從groupKey列表值。減去X這裏X總是比列表值​​gretter所以第二輸出會隨着

val substrackValues = List(Map("A"->List(86,76,34,87,85)),Map("B"->List(87,86,34,57)),Map("C"->List(86,75,77,88)),Map("D"->List(84,45,75,31,89)), 
Map("E"->List(75,77,77,84,97)),Map("F"->List(86,86,86,15,84)),Map("G"->List(31,80))) 
+1

不要忘記,以紀念答案接受,因爲它聽起來就像是爲你工作。 – Gangstead

回答

3

考慮

combineList.groupBy(_._1).mapValues(xs => xs.map(v => X-v._2)) 

它提供

Map(E -> List(75, 77, 77, 84, 97), F -> List(86, 86, 86, 83, 84), A -> List(86, 76, 64, 87, 85), G -> List(31, 80), B -> List(87, 86, 64, 57), C -> List(86, 75, 77, 88), D -> List(84, 45, 75, 67, 89)) 

注意在groupKey嵌入式地圖以上是地圖可以WEL我用[(String,List[Int])]的元組表示,或者甚至更好地聚集成一個映射。

在通過第一個元組元素分組後在這裏提出的解決方案,我們通過X值變換每個列表中的每個元素。

+0

它的工作,但在你的代碼'combineList.groupBy(_._ 1)變化不大.mapValues(XS => xs.map(V => X-v._2))' – Yogesh

+0

@yogesh感謝堆! :) 更新... – elm