Если дублирующих элементов нет:
arr = ['a','e','b','d','c']
('a'..'z').to_a & arr
#> ["a", "b", "c", "d", "e"]
Если дублирующих элементов может быть:
arr = ['a','e','c','b','d','e','c']
h = arr.each_with_object(Hash.new(0)) { |s,h| h[s] += 1 }
#=> {"a"=>1, "e"=>2, "c"=>2, "b"=>1, "d"=>1}
(('a'..'z').to_a & arr).flat_map { |s| [s]*h[s] }
#=> ["a", "b", "c", "c", "d", "e", "e"]
Примечания:
- Документ Array # & гласит: «Порядок сохраняется из исходного массива».
('a'..'z').to_a & arr
совпадает с ('a'..'z').to_a & arr.uniq
.