如何根据条件对列表的元素进行分组?

时间:2018-07-06 12:23:11

标签: scala list

我想在特定范围内对元素进行分组。

例如,我有一个如下列表:

val a = List((1.5, 2), (2.7, 5), (4.0,1), (5.25, 2), (7.80, 4), (11.41,10), (13.10, 5))

我想在给定范围内将所有共享x的(x,y)分组。

例如使用范围1-5、5-10、10-15。

为了获得此输出:

((0-5)->((1.5, 2), (2.7, 5), (4.0,1)),(5-10)->((5.25, 2), (7.80, 4)),(10-15)->((11.41,10), (13.10, 5)))

1 个答案:

答案 0 :(得分:1)

这个想法是根据x(作为Int)除以5来对元组进行分组:

7.0.toInt / 5 // 1

使用groupBy

val list = List((1.5, 2), (2.7, 5), (4.0,1), (5.25, 2), (7.80, 4), (11.41,10), (13.10, 5))

list
  .groupBy { case (x, y) => x.toInt / 5 }
  .map { case (d, values) => (Seq((d * 5), (d + 1) * 5).mkString("-"), values) }

给出:

Map(10-15 -> List((11.41,10), (13.1,5)), 5-10 -> List((5.25,2), (7.8,4)), 0-5 -> List((1.5,2), (2.7,5), (4.0,1)))