根据一组索引删除数组的内容

Mor*_*ess 9 ruby

delete_at只接受一个索引.使用内置方法实现这一目标的好方法是什么?不必是一个集合,也可以是一个索引数组.

arr = ["a", "b", "c"]
set = Set.new [1, 2]
arr.delete_at set
# => arr = ["a"]
Run Code Online (Sandbox Code Playgroud)

Vic*_*gin 17

一内胆:

arr.delete_if.with_index { |_, index| set.include? index }
Run Code Online (Sandbox Code Playgroud)


Dou*_*rer 5

重新打开Array类,并为此添加一个新方法。

class Array

  def delete_at_multi(arr)
    arr = arr.sort.reverse # delete highest indexes first.
    arr.each do |i|
      self.delete_at i
    end
    self
  end

end

arr = ["a", "b", "c"]
set = [1, 2]

arr.delete_at_multi(set)

arr # => ["a"]
Run Code Online (Sandbox Code Playgroud)

如果您不想重新打开类,那么当然可以将其编写为独立方法。确保索引是相反的顺序非常重要,否则,稍后您将更改应该删除的元素在数组中的位置。