scala - 避免在 Scala 中调用 .toMap 之前转换为中间数据结构
问题描述
让我们考虑以下代码:
Set(1, 2, 3, 4, 5)
.map(k => (k, if (k % 2 == 0) "even" else "odd"))
.toMap
有没有办法在 Scala 中简化这一点,避免创建中间集?我将在大型集合上做一些对性能敏感的事情,而不是在现场创建它不会有什么坏处Map
。
如果没有更好的结果,我正在考虑最终实现这样的东西:
Map.from(S, k => if (k % 2 == 0) "even" else "odd"))
我仍在使用 Scala 2.12。
谢谢
解决方案
您可以使用foldleft
:
(1 to 5).foldLeft(Map.empty[Int, String])(
(r, k) => r + (k -> (if (k % 2 == 0) "even" else "odd"))
)
编辑
或者,为了避免中间收集toMap
方法,您可以使用view
:
(1 to 5).view
.map(k => (k, if (k % 2 == 0) "even" else "odd"))
.toMap
推荐阅读
- magnific-popup - 在宏伟的弹出式画廊中添加项目符号
- c# - asp.net 获取字符串列表中的 Oracle table_names
- python - Pandas 创建列并添加值
- konvajs - Konva 自定义形状中的文本
- python - SHAP:如何获得分类变量的特征重要性?
- css - carousel lwc 组件只有宽度需要增加
- python - 数据框删除所有 nan 索引和保持原始索引值的单元格
- javascript - MediaDevices:devicechange 事件在 ubuntu 服务器上不起作用
- excel - SAS - 在另一个文件夹中复制excel文件
- python - Python 在 Excel 中创建所有 OneDrive 上传的列表