Inicializo una matriz de esta manera:
array = Array.new
array << '1' << '2' << '3'
¿Es posible hacer eso en un solo paso? ¿Si es así, cómo?
array = Array.new << 1 << 2 << 3
)
1
a '1'
.
Inicializo una matriz de esta manera:
array = Array.new
array << '1' << '2' << '3'
¿Es posible hacer eso en un solo paso? ¿Si es así, cómo?
array = Array.new << 1 << 2 << 3
)
1
a '1'
.
Respuestas:
Puede usar un literal de matriz:
array = [ '1', '2', '3' ]
También puede utilizar un rango:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
Para matrices de cadenas delimitadas por espacios en blanco, puede usar la sintaxis de cadena de porcentaje :
array = %w[ 1 2 3 ]
También puede pasar un bloque a Array.new
para determinar cuál será el valor de cada entrada:
array = Array.new(3) { |i| (i+1).to_s }
Finalmente, aunque no produce la misma matriz de tres cadenas que las otras respuestas anteriores, tenga en cuenta también que puede usar enumeradores en Ruby 1.8.7+ para crear matrices; por ejemplo:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
to_a
( [*'1'..'3']
).
Array[ "1","2","3"] #=> ["1","2","3"]
(no creo que este método tenga nada que ver con el constructor literal de matriz). También puede usar el Kernel # Array de nivel superior (el nombre del método parece un nombre de clase)Array(1..5) #=> [1,2,3,4,5]
Un trazador de líneas:
array = [] << 1 << 2 << 3 #this is for fixnums.
o
a = %w| 1 2 3 4 5 |
o
a = [*'1'..'3']
o
a = Array.new(3, '1')
o
a = Array[*'1'..'3']
[1,2,3]
que hace una sola inicialización. Además, el tuyo es más personajes. Además, ha creado una matriz de Fixnums mientras que el OP estaba preguntando por una matriz de cadenas.
Junto con las respuestas anteriores, también puede hacer esto
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
Para demostrar que hay más de una seis formas de hacerlo:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
Si 1.método (: +) no fuera posible, también podría hacerlo
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
Claro, es exagerado en este escenario, pero si plus_1
fuera una expresión muy larga, es posible que desee ponerla en una línea separada de la creación de la matriz.
Tu puedes hacer
array = ['1', '2', '3']
Como han señalado otros, también puede inicializar una matriz con la notación% w así:
array = %w(1 2 3)
o
array = %w[1 2 3]
Tenga en cuenta que en ambos casos cada elemento es una cadena, en lugar de un número entero. Entonces, si desea una matriz cuyos elementos sean números enteros, no debe envolver cada elemento con apóstrofos:
array_of_integers = [1, 2, 3]
Además, no es necesario poner una coma entre los elementos (lo cual es necesario cuando se crea una matriz sin esta notación% w). Si hace esto (que a menudo hice por error), como en:
wrong_array = %w(1, 2, 3)
sus elementos serán tres cadenas ---- "1,", "2,", "3". Entonces, si lo hace:
puts wrong_array
la salida será:
1,
2,
3
=>nil
que no es lo que queremos aquí.
¡Espero que esto ayude a aclarar el punto!
Para crear una matriz de este tipo, puede hacer:
array = ['1', '2', '3']
Si tiene una matriz de cadenas, también puede inicializarla así:
array = %w{1 2 3}
simplemente separe cada elemento con cualquier espacio en blanco
Simplemente puede hacer esto con %w
notación en matrices ruby.
array = %w(1 2 3)
Agregará los valores de la matriz 1, 2, 3 a la matriz e imprimirá la salida como ["1", "2", "3"]