Générer un tableau de toutes les lettres et chiffres

94

En utilisant ruby, est-il possible de créer facilement un tableau de chaque lettre de l'alphabet et 0-9?

JP Silvashy
la source

Réponses:

145
[*('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 }

(la Integer#to_sméthode convertit un nombre en une chaîne le représentant dans un système numérique souhaité )

Nakilon
la source
2
Y a-t-il un nom particulier pour l' *opérateur utilisé dans ce contexte? C'est nouveau pour moi.
Michael Burr
1
@Michael Burr, opérateur splat . Voir ici et ici
Nakilon
4
Veuillez indiquer en réponse que l'exemple de code * fonctionnera dans Ruby 1.9 mais pas dans Ruby 1.8
Zabba
2
@Zabba, vous venez de l'indiquer dans votre commentaire ..)
Nakilon
3
L'analyse comparative sous Ruby 2.1 [* ('a' .. 'z'), * ('0' .. '9')] est un peu plus de deux fois plus rapide que (0 ... 36) .map {| i | i.to_s 36} (1,450000s contre 2,26000s où n = 100 000). Si l'inclusion de upcase est souhaitée, utilisez ce qui suit: [* ('a' .. 'z'), * ('A' .. 'Z'), * ('0' .. '9')]
Viet
33

pour les lettres ou les nombres, vous pouvez former des plages et les parcourir. essayez ceci pour avoir une idée générale:

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

pour en extraire un tableau, essayez simplement ce qui suit:

("a".."z").to_a
Pete
la source
8

Vous pouvez également le faire de cette façon:

'a'.upto('z').to_a + 0.upto(9).to_a
utilisateur3731366
la source
6

Essaye ça:

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

Ou comme chaîne:

alphabet_string = alphabet_array.join
qjnr
la source
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
la source
Même si cela peut répondre à la question, il n'y a aucune explication de votre code. Veuillez mettre à jour votre réponse pour fournir une explication de ce que vous faites. Merci!
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
la source
2

Vous pouvez simplement faire ceci:

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