Как насчет:
('aa'..'zz').to_a
сокращенный вариант выглядит следующим образом:
'aa'..'bb').to_a
[
[ 0] "aa",
[ 1] "ab",
[ 2] "ac",
[ 3] "ad",
[ 4] "ae",
[ 5] "af",
[ 6] "ag",
[ 7] "ah",
[ 8] "ai",
[ 9] "aj",
[10] "ak",
[11] "al",
[12] "am",
[13] "an",
[14] "ao",
[15] "ap",
[16] "aq",
[17] "ar",
[18] "as",
[19] "at",
[20] "au",
[21] "av",
[22] "aw",
[23] "ax",
[24] "ay",
[25] "az",
[26] "ba",
[27] "bb"
]
EDIT:
... Я генерировать на основе длины.
Затем используйте длину.
length = 2
(('a' * length) .. ('z' * length)).to_a
Это очень быстрый способ создания комбинаций:
require 'benchmark'
N = 1_000
1.upto(3) do |length|
puts %Q[Length: #{ length }, generating "#{ 'a' * length }" to "#{ 'z' * length }"]
Benchmark.bm(11) do |b|
b.report('permutation') { N.times { ('a'..'z').to_a.repeated_permutation(length).map(&:join) }}
b.report('range') { N.times { (('a' * length) .. ('z' * length)).to_a }}
end
end
Какие выходы:
Length: 1, generating "a" to "z"
user system total real
permutation 0.030000 0.000000 0.030000 ( 0.028286)
range 0.010000 0.000000 0.010000 ( 0.009942)
Length: 2, generating "aa" to "zz"
user system total real
permutation 0.500000 0.010000 0.510000 ( 0.504663)
range 0.240000 0.000000 0.240000 ( 0.240362)
Length: 3, generating "aaa" to "zzz"
user system total real
permutation 15.350000 0.140000 15.490000 (15.535756)
range 6.200000 0.000000 6.200000 ( 6.221575)
Время для «перестановки» получил больше, чем я был готов ждать длина 4
. Не стесняйтесь запускать тест на своей машине, чтобы проверить.
Thats it !! Благодаря! – nizbit