Просто добавьте еще одну опцию, конвертируя в хэш:
ary = [:b, :e, :f, :t, :g, :e]
ary.sort.group_by(&:itself).then { |h| h.delete(:e) + h.values.flatten }
Возвращает массив, сохраняя все :e
впереди.:e
должно существовать.
#=> [:e, :e, :b, :f, :g, :t]
Первая часть возвращает отсортированный хэш группировки:
ary.sort.group_by(&:itself) #=> {:b=>[:b], :e=>[:e, :e], :f=>[:f], :g=>[:g], :t=>[:t]}
Чтобы метод работал даже
при :e
нет :
ary.sort.group_by(&:itself).then { |h| h.delete(:e).to_a + h.values.flatten }
С nil.to_a #=> []