映射并缩小数组

时间:2017-05-10 05:47:31

标签: arrays scala scala-collections

我想在每3个元素中映射一个数组,输出是多个[k,v]对,例如:

input: array(1,2,3,4,5,6,7,8,9,7,12,11)   
output: (1 => 2,3) (4 => 5,6)(7 => 8,9) (7 => 12,11)   

我还希望通过键减少这些对,例如,如果我想用key = 7收集数据,那么输出将为(7=> 8,9,12,11).

非常感谢。

1 个答案:

答案 0 :(得分:3)

我认为您需要的是

val input = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 7, 12, 11)
val output = input.toSeq.grouped(3)
  .map(g => (g.head, g.tail)).toList
  .groupBy(_._1)
  .mapValues(l => l.flatMap(_._2))

结果将是

  

地图(4 - >列表(5,6),7 - >列表(8,9,12,11),1 - >列表(2,3))