基于整数值创建 n 个项的数组

假设我有一个整数值,例如 10

如何创建一个包含10个元素的数组,如 [1,2,3,4,5,6,7,8,9,10]

70805 次浏览
def array_up_to(i)
(1..i).to_a
end

Which allows you to:

 > array_up_to(10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

You can just splat a range:

[*1..10]
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Ruby 1.9 allows multiple splats, which is rather handy:

[*1..3, *?a..?c]
#=> [1, 2, 3, "a", "b", "c"]

yet another tricky way:

> Array.new(10) {|i| i+1 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

You can do this:

array= Array(0..10)

If you want to input, you can use this:

puts "Input:"
n=gets.to_i
array= Array(0..n)
puts array.inspect

About comments with tricky methods:

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


}

Be careful, this tricky method Array.new(n, &:next) is slower while three other basic methods are same.

                           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)