我想在特定范围内对元素进行分组。
例如,我有一个如下列表:
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)))
答案 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)))