Estoy intentando generar una matriz que contenga todas las combinaciones de palabras de dos letras.Ruby - Generar todas las palabras de dos letras
¿Cuál sería la mejor manera de generarlo.
¿Alguien podría ayudarme?
Estoy intentando generar una matriz que contenga todas las combinaciones de palabras de dos letras.Ruby - Generar todas las palabras de dos letras
¿Cuál sería la mejor manera de generarlo.
¿Alguien podría ayudarme?
Como steenslag
puntos cabo, la forma más rápida es
('aa'..'zz').to_a
Si su alfabeto no es 'a' a la 'z', sin embargo, puede utilizar Array#repeated_combination
:
alphabet = %w[А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я]
alphabet.repeated_combination(2).map(&:join) # => ["AA", "AБ", ...]
O, como Mladen
señala:
alphabet.product(alphabet).map(&:join)
Nota: repeated_combination
está disponible en Ruby 1.9.2 o con require 'backports/1.9.2/array/repeated_combination'
de mi backports
gema.
('aa'..'zz').to_a
Convierte un rango en una matriz.
** ¡Este ** es el motivo por el que amo a Ruby! Tuve '(('a' .. 'z'). To_a.permutation (2) .map (&: join) + ('a' .. 'z'). To_a.map {| a | a * 2 }) ', pero luego pensé, *" Esto es un desastre. Me pregunto si '('aa' .. 'zz')' funcionaría? "* Entonces, me sorprendió. –
@ Ashley: su enfoque es muy genérico, sin embargo, y el uso de 'repeated_combination' lo hace más limpio (ver mi respuesta). –
O, simplemente, 'Matriz # producto' en sí misma. :) –
@Mladen: De hecho, y eso podría ser útil para mezclar diferentes conjuntos de letras. Respuesta actualizada, gracias. –