根据整数值创buildn个项目的数组
鉴于我有一个整数值,例如10
。
我怎样才能创build一个像[1,2,3,4,5,6,7,8,9,10]
10个元素的数组?
你可以画一个范围:
[*1..10] #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Ruby 1.9允许多个splats,这相当方便:
[*1..3, *?a..?c] #=> [1, 2, 3, "a", "b", "c"]
又一个棘手的方法:
> Array.new(10) {|i| i+1 } => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def array_up_to(i) (1..i).to_a end
这可以让你:
> array_up_to(10) => [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)
你可以这样做:
array= Array(0..10)
如果你想input,你可以使用这个:
puts "Input:" n=gets.to_i array= Array(0..n) puts array.inspect