4

我有一个大数组(10+ 百万个对象),我想将它组合成一个对象(为简单起见,我们假设这里是一个字符串)并通过一些处理(由函数抽象)运行数组中的每个元素do_stuff。有两种自然的方法可以做到这一点:

memo = ""
big_array.each do |e|
  memo << do_stuff(e)
end
memo

big_array.reduce("") do |memo, e|
  memo + do_stuff(e)
end

reduce/inject 语法在美学上更具吸引力,但问题是哪个内存效率更高。我们已经知道each 比 reduce 更节省时间,但是内存呢?

我也不清楚如何分析 Ruby 中的内存使用情况,尤其是仅通过一段代码,所以如果有人可以提供一些指向我也将不胜感激的指针。

4

1 回答 1

-1

我很确定使用 map reduce (如您的示例中所写)您每次都在创建一个新字符串+)。

使用<<您正在修改原始字符串。这应该会更好,因为将触发更少的 GC 周期。

您提到您使用字符串作为示例;所以很难回答你真正的问题。

于 2013-04-25T18:06:54.330 回答