我已经对此进行了Google搜索,并得到了片面的/矛盾的意见- 在Ruby / Rails中对数组执行a map和a 之间实际上有什么区别collect吗?
这些文档似乎没有任何建议,但是方法或性能上可能存在差异吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
我做了一个基准测试来尝试回答这个问题,然后找到了这篇文章,所以这是我的发现(与其他答案略有不同)
这是基准代码:
require 'benchmark'
h = { abc: 'hello', 'another_key' => 123, 4567 => 'third' } a = 1..10 many = 500_000
Benchmark.bm do |b| GC.start
b.report("hash keys collect") do many.times do h.keys.collect(&:to_s) end end
GC.start
b.report("hash keys map") do many.times do h.keys.map(&:to_s) end end
GC.start
b.report("array collect") do many.times do a.collect(&:to_s) end end
GC.start
b.report("array map") do many.times do a.map(&:to_s) end end end
我得到的结果是:
user system total real
hash keys collect 0.540000 0.000000 0.540000 ( 0.570994) hash keys map 0.500000 0.010000 0.510000 ( 0.517126) array collect 1.670000 0.020000 1.690000 ( 1.731233) array map 1.680000 0.020000 1.700000 ( 1.744398)
也许别名不是免费的?
问题来源于stack overflow