Implementé una función para agrupar anagramas. En pocas palabras:Ruby forma de agrupar anagramas en matriz de cadenas
de entrada: [ 'coches', 'para', 'patatas', 'racs', 'cuatro', 'cicatriz', 'cremas', gritar ']
de salida: [ ["autos", "racs", "cicatriz"], ["cuatro"], ["para"], ["papas"], ["cremas", "gritar"]]
Me gustaria saber si hay una mejor manera de hacer esto. Realmente creo que utilicé demasiadas declaraciones de repetición: until
, select
, delete_if
. ¿Hay alguna manera de combinar la declaración select
y delete_if
? Que significa, ¿los elementos seleccionados se pueden eliminar automáticamente?
Código:
def group_anagrams(words)
array = []
until words.empty?
word = words.first
array.push(words.select { |match| word.downcase.chars.sort.join.eql?(match.downcase.chars.sort.join) })
words.delete_if { |match| word.downcase.chars.sort.join.eql?(match.downcase.chars.sort.join) }
end
array
end
Gracias de antemano,
posible duplicado de [Ruby Anagram Using String # sum] (http://stackoverflow.com/questions/9517745/ruby-anagram-using-stringsum) –