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

110

使用Ruby,能否轻松地生成包含字母和0-9数字的数组?

7个回答

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

或者

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

或者

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

Integer#to_s方法将数字转换为所需的数字系统表示的字符串。)

2
在这种情况下,‘*’运算符有特定的名称吗?对我来说是新的。 - Michael Burr
4
请在回答中指出 * 代码示例可以在 Ruby 1.9 中工作,但不能在 Ruby 1.8 中工作。 - Zabba
2
@Zabba,你刚才在评论中指出了它..) - Nakilon
3
在Ruby 2.1下,[('a'..'z'),('0'..'9')]的基准测试速度比(0...36).map{|i|i.to_s 36}快了一倍多一点(当n = 100,000时,分别为1.450000秒和2.26000秒)。如果需要包含大写字母,可以使用以下代码:[('a'..'z'),('A'..'Z'),*('0'..'9')]。 - Viet
1
使用Base36数字范围是天才!正是我所寻找的。我创建了一个文件分发的目录结构。所有文件名都是Base 36数字。然后将每个文件存储在其关联的目录中(例如,filename [0])。 - Clint Pachl
显示剩余4条评论

39

对于字母或数字,你可以形成范围并进行迭代。尝试以下代码以获得概念:

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

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

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

12

你也可以这样做:

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

11

试试这个:

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

或者作为字符串:

alphabet_string = alphabet_array.join

3
您可以直接这样做:
("0".."Z").map { |i| i }

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

这段代码表示一个包含26个小写字母的列表,列表中的每个元素都是一个字符串。

尽管这可能回答了问题,但是你的代码没有解释。请更新你的答案,提供你正在做什么的解释。谢谢! - Miroslav Glamuzina

3
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接