给定一个Ruby数组ary1,我想生成另一个数组ary2,该数组具有与ary1相同的元素,但给定ary1索引集的元素除外。

我可以使用以下方式将此功能猴子修补到Ruby的Array类上

class Array
  def reject_at(*indices)
    copy = Array.new(self)
    indices.uniq.sort.reverse_each do |i|
      copy.delete_at i
    end
    return copy
  end
end

然后我可以这样使用:
ary1 = [:a, :b, :c, :d, :e]
ary2 = ary1.reject_at(2, 4)
puts(ary2.to_s) # [:a, :b, :d]

尽管这很好用,但我仍感觉到我必须遗漏一些明显的东西。 Ruby是否已经内置了某些类似功能? 例如,可以并且应该将Array#slice用于此任务吗?

最佳答案

不要以为有内置的解决方案。提出以下建议:

ary1 = [:a, :b, :c, :d, :e]
indexes_to_reject = [1,2,3]

ary1.reject.each_with_index{|i, ix| indexes_to_reject.include? ix }

关于arrays - 通过索引拒绝Ruby数组元素的惯用方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30458310/

10-11 13:34