2012-06-23 7 views
43

Dado que tengo un valor entero de, por ejemplo, 10.Crear una matriz de n elementos basados ​​en el valor entero

¿Cómo puedo crear una matriz de 10 elementos como [1,2,3,4,5,6,7,8,9,10]?

+2

duplicado posible de [Forma correcta de rellenar una matriz con un rango en Ruby] (http://stackoverflow.com/questions/191329/correct-way-to-populate-an-array-with-a -range-in-ruby) –

Respuesta

97

Puede simplemente splat una gama:

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

Ruby 1.9 permite a varios símbolos de la, que es bastante útil:

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

+1 para varios símbolos – megas

+1

Esto es genial, porque no me di cuenta antes de eso: [* 0..0] # => [0] Pero, [* 1..0] # => [] – hcarreras

+0

@MichaelKohl - gracias - ¿qué significa el signo de interrogación? antes de las letras de arriba significa? – BKSpurgeon

6
def array_up_to(i) 
    (1..i).to_a 
end 

¿Qué le permite:

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

otra manera complicada:

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

Aún más complicado si lo escribes como 'Array.new (10, y: siguiente) '. –

+6

Incluso más complicado: 'Array.new (10, & 1.method (: +))' –

1

Usted puede hacer esto:

array= Array(0..10) 

Si desea introducir, puede utilizar esto:

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

Acerca de los comentarios con métodos complicados:

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 

} 

Tenga cuidado, este complicado método Array.new(n, &:next) es más lento mientras que tres otros métodos básicos son lo mismo.

      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) 
Cuestiones relacionadas