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


95

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

Ответы:


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


7

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

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

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

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.