【发布时间】:2018-08-20 22:23:51
【问题描述】:
为什么在 scala 中的 Seq 上有一个方法 reverseMap,而它似乎与 reverse.map 做同样的事情?
一个可能比另一个快吗?
【问题讨论】:
-
Scaladoc for
reverseMap明确指出:“xs.reverseMap(f) 与 xs.reverse.map(f) 相同,但可能更高效。”。
标签: scala collections seq
为什么在 scala 中的 Seq 上有一个方法 reverseMap,而它似乎与 reverse.map 做同样的事情?
一个可能比另一个快吗?
【问题讨论】:
reverseMap 明确指出:“xs.reverseMap(f) 与 xs.reverse.map(f) 相同,但可能更高效。”。
标签: scala collections seq
对于可以有效向后迭代的集合(例如双向链表或可索引集合),reverseMap 可能更节省内存和时间效率,因为reverse 是类型保留的。 IE。如果在数组上调用它,它将创建一个反转的数组副本,然后map 该数组。 (如果reverse 创建了反向迭代器而不是数组,情况会有所不同。)
这需要 O(n) 额外空间并迭代数组两次。而reverseMap 只迭代一次,不需要额外的空间。
不幸的是,通常不可能将此类优化留给编译器。特别是,找出reverse.map 和reverseMap 相同是函数问题的一个实例,这是不可判定的。
【讨论】: