Hasilkan array dari semua huruf dan angka

95

Menggunakan ruby, apakah mungkin membuat array untuk setiap huruf dalam alfabet dan 0-9 dengan mudah?

JP Silvashy
sumber

Jawaban:

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

atau

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

atau

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

( Integer#to_smetode mengonversi angka menjadi string yang mewakilinya dalam sistem angka yang diinginkan )

Nakilon
sumber
2
Apakah ada nama tertentu untuk *operator yang digunakan dalam konteks ini? Itu baru bagiku.
Michael Burr
1
@ Michael Burr, operator percikan . Lihat di sini dan di sini
Nakilon
4
tolong tunjukkan dalam jawaban bahwa contoh kode * akan berfungsi di Ruby 1.9 tetapi tidak di Ruby 1.8
Zabba
2
@ Zabba, Anda baru saja menunjukkannya di komentar Anda ..)
Nakilon
3
Pembandingan di bawah Ruby 2.1 [* ('a' .. 'z'), * ('0' .. '9')] sedikit lebih dari dua kali lebih cepat dari (0 ... 36) .map {| i | i.to_s 36} (1,450000s versus 2,26000s di mana n = 100,000). Jika penyertaan huruf besar diinginkan, gunakan yang berikut: [* ('a' .. 'z'), * ('A' .. 'Z'), * ('0' .. '9')]
Viet
34

untuk huruf atau angka Anda dapat membentuk rentang dan mengulanginya. coba ini untuk mendapatkan gambaran umum:

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

untuk mendapatkan array darinya, coba saja yang berikut ini:

("a".."z").to_a
Pete
sumber
9

Anda juga bisa melakukannya dengan cara ini:

'a'.upto('z').to_a + 0.upto(9).to_a
pengguna3731366
sumber
7

Coba ini:

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

Atau sebagai string:

alphabet_string = alphabet_array.join
qjnr
sumber
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
sumber
Meskipun ini mungkin menjawab pertanyaan, tidak ada penjelasan tentang kode Anda. Harap perbarui jawaban Anda untuk memberikan penjelasan tentang apa yang Anda lakukan. Terima kasih!
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
pengguna1290366
sumber
2

Anda bisa melakukan ini:

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