生成所有字母和数字的数组


93

使用ruby,是否可以轻松地将字母中的每个字母和0-9组成一个数组?

Answers:


144
[*('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 运算符 Michael Burr 。看到这里这里
Nakilon

4
请在回答中指出*代码示例将在Ruby 1.9中工作,但在Ruby 1.8中不工作
Zabba 2011年

2
@Zabba,您刚刚在评论中表示了这一点..)
Nakilon 2011年

3
在Ruby 2.1 [*('a'..'z'),*('0'..'9')]下进行基准测试的速度是(0 ... 36).map {| i的两倍多| i.to_s 36}(1.450000对2.26000,其中n = 100,000)。如果需要包含大写字母,请使用以下内容:[*('a'..'z'),*('A'..'Z'),*('0'..'9')]
越南文

33

对于字母或数字,您可以形成范围并对其进行迭代。尝试这样做以获得大致的想法:

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

要从中获取数组,只需尝试以下操作:

("a".."z").to_a

8

您也可以这样进行:

'a'.upto('z').to_a + 0.upto(9).to_a

6

试试这个:

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


即使这可以回答问题,也不会解释您的代码。请更新您的答案以提供您所做的解释。谢谢!
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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.