给定我的整数值,例如10
。
如何创建由10个元素组成的数组[1,2,3,4,5,6,7,8,9,10]
?
Answers:
您可以只喷射一个范围:
[*1..10]
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Ruby 1.9允许多个splat,这非常方便:
[*1..3, *?a..?c]
#=> [1, 2, 3, "a", "b", "c"]
?c == 'c' #=> true
[*1..3, *'a'..'z']
但这对于代码打高尔夫球很有用,我也不知道?a == 'a'
(也许我想念更多吗?),竖起大拇指:D
还有另一种棘手的方式:
> Array.new(10) {|i| i+1 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
关于采用棘手方法的评论:
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)
def array_up_to(i)
(1..i).to_a
end
这使您可以:
> array_up_to(10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]