首页 > 解决方案 > 如何根据条件对列表的元素进行分组?

问题描述

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

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

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)))

标签: scalalist

解决方案


这个想法是基于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)))

推荐阅读