Gerar matriz de todas as letras e dígitos

93

Usando o Ruby, é possível criar uma matriz de cada letra do alfabeto e 0-9 facilmente?

JP Silvashy
fonte

Respostas:

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

ou

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

ou

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

(o Integer#to_smétodo converte um número em uma string que o representa em um sistema numérico desejado )

Nakilon
fonte
2
Existe um nome específico para o *operador usado neste contexto? É novo para mim.
Michael Burr
1
@Michael Burr, operador de splat . Veja aqui e aqui
Nakilon
4
indique na resposta que o * exemplo de código funcionará no Ruby 1.9, mas não no Ruby 1.8
Zabba
2
@Zabba, você acabou de indicá-lo em seu comentário ..)
Nakilon
3
O benchmarking em Ruby 2.1 [* ('a' .. 'z'), * ('0' .. '9')] é um pouco mais do que duas vezes mais rápido que (0 ... 36) .map {| i | i.to_s 36} (1,450000s versus 2,26000s onde n = 100.000). Se desejar incluir a parte superior da caixa, use o seguinte: [* ('a' .. 'z'), * ('A' .. 'Z'), * ('0' .. '9')]
Viet
33

para letras ou números, você pode formar intervalos e iterar sobre eles. tente isso para ter uma ideia geral:

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

para obter uma matriz dele, tente o seguinte:

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

Você também pode fazer desta forma:

'a'.upto('z').to_a + 0.upto(9).to_a
user3731366
fonte
6

Experimente isto:

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

Ou como string:

alphabet_string = alphabet_array.join
qjnr
fonte
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
fonte
Mesmo que isso responda à pergunta, não há explicação para o seu código. Atualize sua resposta para fornecer uma explicação sobre o que você está fazendo. Obrigado!
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
user1290366
fonte
2

Você pode apenas fazer isso:

("0".."Z").map { |i| i }
Giordanofalves
fonte