Сгенерировать массив всех букв и цифр

95

Можно ли с помощью Ruby легко составить массив из каждой буквы алфавита и 0-9?

JP Silvashy
источник

Ответы:

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

или

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

или

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

( Integer#to_sметод преобразует число в строку, представляющую его в желаемой системе счисления )

Накилон
источник
2
Есть ли конкретное имя для *оператора, используемого в этом контексте? Для меня это в новинку.
Майкл Берр
1
@ Майкл Бёрр, оператор splat . Смотрите здесь и здесь
Накилон
4
укажите в ответ, что пример кода * будет работать в Ruby 1.9, но не в Ruby 1.8
Zabba
2
@Zabba, вы только что указали это в своем комментарии ..)
Накилон
3
Бенчмаркинг в Ruby 2.1 [* ('a' .. 'z'), * ('0' .. '9')] чуть более чем в два раза быстрее, чем (0 ... 36) .map {| i | i.to_s 36} (1,450000 с против 2,26000 с, где n = 100000). Если требуется включение верхнего регистра, используйте следующее: [* ('a' .. 'z'), * ('A' .. 'Z'), * ('0' .. '9')]
Viet
34

для букв или цифр вы можете формировать диапазоны и перебирать их. попробуйте это, чтобы получить общее представление:

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

чтобы получить из него массив, просто попробуйте следующее:

("a".."z").to_a
Пит
источник
9

Вы также можете сделать это так:

'a'.upto('z').to_a + 0.upto(9).to_a
пользователь3731366
источник
7

Попробуй это:

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

Или в виде строки:

alphabet_string = alphabet_array.join
qjnr
источник
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"]

Даниэль
источник
Несмотря на то, что это может ответить на вопрос, нет объяснения вашего кода. Обновите свой ответ, чтобы пояснить, что вы делаете. Благодарность!
Мирослав Гламузина 07
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
источник
2

Вы можете просто сделать это:

("0".."Z").map { |i| i }
гиорданофалвес
источник