86

たとえば、の整数値があるとし10ます。

のような 10 個の要素の配列を作成するにはどうすればよい[1,2,3,4,5,6,7,8,9,10]ですか?

4

5 に答える 5

167

範囲をスプラットすることができます:

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

Ruby 1.9 では複数のスプラットが許可されており、かなり便利です。

[*1..3, *?a..?c]
#=> [1, 2, 3, "a", "b", "c"]
于 2012-06-23T22:02:30.853 に答える
33

さらに別のトリッキーな方法:

> Array.new(10) {|i| i+1 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
于 2012-06-23T22:22:47.933 に答える
9

トリッキーな方法のコメントについて:

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)他の 3 つの基本的な方法は同じですが、このトリッキーな方法は遅いことに注意してください。

                           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)
于 2015-12-14T00:25:50.243 に答える
8
def array_up_to(i)
    (1..i).to_a
end

これにより、次のことが可能になります。

 > array_up_to(10)
 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
于 2012-06-23T21:44:19.670 に答える