Вы можете связать Enumerable with_index
с методом Array reject
, чтобы сделать то, что вы хотите, хотя это может нарушить ваше желание не связывать отдельные вызовы метода или писать блок чтобы сделать это:
my_array = ['some_rather', 'long_named', 'array_element', 'entry', 'long_named']
indices_to_remove = [1, 3]
filtered = my_array.reject.with_index { |_, index| indices_to_remove.include?(index) }
p filtered # => ["some_rather", "array_element", "long_named"]
p my_array # => ["some_rather", "long_named", "array_element", "entry", "long_named"]
Если это не приемлемо, единственное, о чем я могу подумать сейчас - сохранить дубликаты (как отмечено в моем комментарии к вашему решению), это изменить с indices_to_remove
до indices_to_keep
:
my_array = ['some_rather', 'long_named', 'array_element', 'entry', 'long_named']
indices_to_remove = [1, 3]
indices_to_keep = [*(0...my_array.length)] - indices_to_remove
filtered = my_array.values_at(*indices_to_keep)
p filtered # => ["some_rather", "array_element", "long_named"]
p my_array # => ["some_rather", "long_named", "array_element", "entry", "long_named"]