根据整数值创建n个项目的数组


Answers:


149

您可以只喷射一个范围:

[*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"]

3
太好了,因为在此之前我没有意识到:[* 0..0]#=> [0]但是[[1..0]#=> []
hcarreras

@MichaelKohl-谢谢-问号是什么?在上面的字母表示之前?
BKSpurgeon '16

2
它们是字符文字。?c == 'c' #=> true
Michael Kohl

1
@MichaelKohl看起来是一种比较陌生的方法,我想我希望使用单引号来保持清晰,[*1..3, *'a'..'z']但这对于代码打高尔夫球很有用,我也不知道?a == 'a'(也许我想念更多吗?),竖起大拇指:D
SidOfc

3
我知道您是在7年前写的,但这很酷。谢谢!
凯文


8

关于采用棘手方法的评论:

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)


1

你可以这样做:

array= Array(0..10)

如果要输入,可以使用以下命令:

puts "Input:"
n=gets.to_i
array= Array(0..n)
puts array.inspect
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.