require 'benchmark'
Benchmark.bm { |x|
x.report('[*..] ') do
[*1000000 .. 9999999]
end
x.report('(..).to_a') do
(1000000 .. 9999999).to_a
end
x.report('Array(..)') do
Array(1000000 .. 9999999)
end
x.report('Array.new(n, &:next)') do
Array.new(8999999, &:next)
end
}
注意,这个棘手的方法Array.new(n, &:next)速度较慢,而其他三个基本方法是相同的。
user system total real
[*..] 0.734000 0.110000 0.844000 ( 0.843753)
(..).to_a 0.703000 0.062000 0.765000 ( 0.843752)
Array(..) 0.750000 0.016000 0.766000 ( 0.859374)
Array.new(n, &:next) 1.250000 0.000000 1.250000 ( 1.250002)
6条答案
按热度按时间gfttwv5a1#
您可以直接拆分一个范围:
Ruby 1.9允许多个splat,这非常方便:
qyuhtwio2#
还有另一个狡猾的方法:
iq0todco3#
关于使用巧妙方法的注解:
注意,这个棘手的方法
Array.new(n, &:next)
速度较慢,而其他三个基本方法是相同的。zsohkypk4#
它允许您:
yhxst69z5#
您可以执行以下操作:
如果你想输入,你可以使用这个:
bbuxkriu6#
我认为最有效的方法之一是: