Generieren Sie ein Array aller Buchstaben und Ziffern

93

Ist es mit Ruby möglich, einfach ein Array aus jedem Buchstaben des Alphabets und 0-9 zu erstellen?

JP Silvashy
quelle

Antworten:

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

oder

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

oder

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

(Die Integer#to_sMethode konvertiert eine Zahl in eine Zeichenfolge, die sie in einem gewünschten Zahlensystem darstellt. )

Nakilon
quelle
2
Gibt es einen bestimmten Namen für den *in diesem Zusammenhang verwendeten Operator? Es ist neu für mich.
Michael Burr
1
@ Michael Burr, Splat-Betreiber . Siehe hier und hier
Nakilon
4
Bitte geben Sie als Antwort an, dass das * Codebeispiel in Ruby 1.9 funktioniert, jedoch nicht in Ruby 1.8
Zabba
2
@ Zabba, Sie haben es gerade in Ihrem Kommentar angegeben ..)
Nakilon
3
Das Benchmarking unter Ruby 2.1 [* ('a' .. 'z'), * ('0' .. '9')] ist etwas mehr als doppelt so schnell wie (0 ... 36) .map {| i | i.to_s 36} (1.450000s gegenüber 2.26000s mit n = 100.000). Wenn die Aufnahme von Großbuchstaben gewünscht wird, verwenden Sie Folgendes: [* ('a' .. 'z'), * ('A' .. 'Z'), * ('0' .. '9')]
Viet
33

Für Buchstaben oder Zahlen können Sie Bereiche bilden und diese durchlaufen. Versuchen Sie dies, um eine allgemeine Vorstellung zu bekommen:

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

Um ein Array daraus zu erstellen, versuchen Sie einfach Folgendes:

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

Sie können es auch so machen:

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

Versuche dies:

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

Oder als Zeichenfolge:

alphabet_string = alphabet_array.join
qjnr
quelle
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
quelle
Auch wenn dies die Frage beantworten kann, gibt es keine Erklärung für Ihren Code. Bitte aktualisieren Sie Ihre Antwort, um zu erklären, was Sie tun. Vielen Dank!
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
quelle
2

Sie können dies einfach tun:

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