scala - 如何根据条件对列表的元素进行分组?
问题描述
我想对特定范围内的元素进行分组。
例如,我有一个列表如下:
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)))
解决方案
这个想法是基于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)))
推荐阅读
- javascript - JQuery - 将背景位置设置为鼠标移动的位置
- handlebars.js - 在 Sendgrid Design 模板中,如何对表格使用把手迭代?
- powershell - UIPath 中的 Powershell。抛出:无法将“Microsoft.Exchange.WebServices.Data.GetItemResponse”类型的对象转换为“System.String”类型
- android - Firebase 规则解决错误
- node.js - 硒网络驱动程序。通过 selenium 网格运行测试时如何安装 chrome 扩展?
- javascript - Grapesjs 删除自定义工具问题
- c# - 数据表:切换 2 列没有标题
- angular - Angular 暴露的组件方法
- android-studio - 如何在 2D Libgdx 游戏中创建子弹
- windows - x64 从 asm 调用 createthread