Если вы используете подход функционального программирования, вам не нужно беспокоиться о порядке индексов
str = "happydays"
indexes_to_reject = [[1,7],[2,8]] # Not in "correct" order, but still works
all_indexes = indexes_to_reject.flatten(1)
str.each_char.reject.with_index{|char, index| all_indexes.include?(index)}.join
Также работает с диапазонами:
str = "happydays"
ranges_to_reject = [1..2, 7..8]
str.chars.reject.with_index {|char, index|
ranges_to_reject.any?{|range| range.include?(index)}
}.join