给定一个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/