Genere una matriz de todas las letras y dígitos

94

Usando ruby, ¿es posible hacer una matriz de cada letra del alfabeto y 0-9 fácilmente?

JP Silvashy
fuente

Respuestas:

145
[*('a'..'z'), *('0'..'9')] # doesn't work in Ruby 1.8

o

('a'..'z').to_a + ('0'..'9').to_a # works in 1.8 and 1.9

o

(0...36).map{ |i| i.to_s 36 }

(el Integer#to_smétodo convierte un número en una cadena que lo representa en un sistema numérico deseado )

Nakilon
fuente
2
¿Existe un nombre particular para el *operador utilizado en este contexto? Es nuevo para mi
Michael Burr
1
@Michael Burr, operador de splat . Vea aquí y aquí
Nakilon
4
por favor indique en respuesta que el * código de muestra funcionará en Ruby 1.9 pero no en Ruby 1.8
Zabba
2
@Zabba, acabas de indicarlo en tu comentario ...)
Nakilon
3
La evaluación comparativa en Ruby 2.1 [* ('a' .. 'z'), * ('0' .. '9')] es un poco más del doble de rápido que (0 ... 36) .map {| i | i.to_s 36} (1.450000s versus 2.26000s donde n = 100,000). Si se desea incluir mayúsculas, use lo siguiente: [* ('a' .. 'z'), * ('A' .. 'Z'), * ('0' .. '9')]
Viet
33

para letras o números, puede formar rangos e iterar sobre ellos. intente esto para tener una idea general:

("a".."z").each { |letter| p letter }

para obtener una matriz, intente lo siguiente:

("a".."z").to_a
Pete
fuente
8

También puedes hacerlo de esta manera:

'a'.upto('z').to_a + 0.upto(9).to_a
usuario3731366
fuente
6

Prueba esto:

alphabet_array = [*'a'..'z', *'A'..'Z', *'0'..'9']

O como cadena:

alphabet_string = alphabet_array.join
qjnr
fuente
3
letters = *('a'..'z')

=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

Daniel
fuente
Aunque esto puede responder a la pregunta, no hay explicación de su código. Actualice su respuesta para proporcionar una explicación de lo que está haciendo. ¡Gracias!
Miroslav Glamuzina
2
myarr = [*?a..?z]       #generates an array of strings for each letter a to z
myarr = [*?a..?z] + [*?0..?9] # array of strings a-z and 0-9
usuario1290366
fuente
2

Puedes hacer esto:

("0".."Z").map { |i| i }
giordanofalves
fuente