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?

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 )


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

8

Você também pode fazer desta forma:

'a'.upto('z').to_a + 0.upto(9).to_a

6

Experimente isto:

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

Ou como string:

alphabet_string = alphabet_array.join

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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.