2011-03-06 26 views

回答

20

由于steenslag指出,最快的方法是

('aa'..'zz').to_a 

如果你的字母不是 'a' 到 'Z',不过,你可以使用Array#repeated_combination

alphabet = %w[А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я] 
alphabet.repeated_combination(2).map(&:join) # => ["AA", "AБ", ...] 

或者,如Mladen指出:

alphabet.product(alphabet).map(&:join) 

Noterepeated_combination在Ruby 1.9.2中可用,或者在backports宝石中可用require 'backports/1.9.2/array/repeated_combination'

+3

或者,简单地说,它本身就是'Array#product'。 :) – 2011-03-06 20:43:15

+0

@Mladen:确实,这可能对混合不同的字母集合有用。答复更新,谢谢。 – 2011-03-06 20:52:01

8
('aa'..'zz').to_a 

将范围转换为数组。

+0

**这**是我喜欢Ruby的原因!我有'(('a'..'z')to_a.permutation(2).map(&:join)+('a'..'z')。to_a.map {| a | a * 2 })',但后来我想,*“这是一团糟,我想知道'('aa'''zz')'会起作用吗?”然后,我很惊讶。 – 2011-03-06 19:51:56

+0

@Ashley:虽然你的方法非常通用,并且使用'repeated_combination'使它更加清晰(请参阅我的答案)。 – 2011-03-06 20:28:07