通过索引拒绝Ruby数组元素的惯用方法

时间:2015-05-26 12:15:12

标签: arrays ruby

给定一个Ruby数组ary1,我想生成另一个与ary2具有相同元素的数组ary1,除了给定{{1}的一组索引。

我可以使用

将此功能修补到Ruby的ary1
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

虽然这种方法很好,但我觉得我必须遗漏一些明显的东西。 Ruby中是否已经内置了一些这样的功能?例如,是否可以ary1 = [:a, :b, :c, :d, :e] ary2 = ary1.reject_at(2, 4) puts(ary2.to_s) # [:a, :b, :d] 用于此任务?

2 个答案:

答案 0 :(得分:10)

不要认为有一个内置的解决方案。得出以下结论:

OSC:: opensc-tool.exe -s 00a40400060102030405dd -s 00c00000
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 06 01 02 03 04 05 DD
Received (SW1=0x90, SW2=0x00)
Sending: 00 C0 00 00
Received (SW1=0x88, SW2=0x88)

答案 1 :(得分:2)

相反,有Array#values_at。您可以通过反转索引来选择:

class Array
  def values_without(*indices)
    values_at(*((0...size).to_a - indices))
  end
end

[:a, :b, :c, :d, :e].values_without(2, 4)
# => [:a, :b, :d]