让我们考虑以下代码:
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
Scala:如何从集合[K]创建一个Map[K,V]和一个从K到V的函数?