【问题标题】:Seq - reverseMap vs reverse.map in ScalaSeq - Scala 中的 reverseMap 与 reverse.map
【发布时间】:2018-08-20 22:23:51
【问题描述】:

为什么在 scala 中的 Seq 上有一个方法 reverseMap,而它似乎与 reverse.map 做同样的事情?

一个可能比另一个快吗?

【问题讨论】:

  • Scaladoc for reverseMap 明确指出:“xs.reverseMap(f) 与 xs.reverse.map(f) 相同,但可能更高效。”。

标签: scala collections seq


【解决方案1】:

对于可以有效向后迭代的集合(例如双向链表或可索引集合),reverseMap 可能更节省内存和时间效率,因为reverse 是类型保留的。 IE。如果在数组上调用它,它将创建一个反转的数组副本,然后map 该数组。 (如果reverse 创建了反向迭代器而不是数组,情况会有所不同。)

这需要 O(n) 额外空间并迭代数组两次。而reverseMap 只迭代一次,不需要额外的空间。

不幸的是,通常不可能将此类优化留给编译器。特别是,找出reverse.mapreverseMap 相同是函数问题的一个实例,这是不可判定的。

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多