Я реализовал функцию для группировки анаграмм. В двух словах:
ввод: ['машины', 'за', 'картошка', 'ракс', 'четыре', 'шрам', 'кремы', крик']
вывод: [["тачки", "racs", "шрам"], ["четыре"], ["для"], ["картошка"],["сливки", "крик"]]
Я хотел бы знать, есть ли лучший способ сделать это. Я действительно думаю, что использовал слишком много операторов повторения: until
, select
, delete_if
. Есть ли способ объединить операторы select
и delete_if
? Это означает, что выбранные элементы могут быть автоматически удалены?
Код:
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
Заранее спасибо,