2

我想知道 Ruby 中是否有允许基于另一个数组或位掩码过滤数组的 Array 方法。

下面是一个示例和一个快速实现,用于说明目的:

class Array
  def filter(f)
    res = []
    if f.is_a? Integer
      (0...self.size).each do |i|
        res << self[i] unless f[i].nil? || 2**i & f == 0
      end
    else
      (0...self.size).each do |i|
        res << self[i] unless f[i].nil? || f[i] == 0
      end
    end
    return res
  end
end

例子:

%w(a b c).filter([1, 0, 1]) ==> ['a', 'c']
%w(a b c).filter(4) ==> ['c']
%w(a b c).filter([1]) ==> ['a']

谢谢!

4

2 回答 2

6

在 ruby​​ 1.9Fixnum#[]中为您提供特定位置的位值,因此它适用于整数和数组。我在想这样的事情:

class Array
    def filter f
        select.with_index { |e,i| f[i] == 1 }
    end
end

%w(a b c).filter([1, 0, 1]) #=> ['a', 'c']
%w(a b c).filter(4) #=> ['c']
%w(a b c).filter(5) #=> ['a', c']
%w(a b c).filter([1]) #=> ['a']
于 2012-08-23T05:14:01.937 回答
0
class Array
    def filter(f)
        f = f.to_s(2).split("").map(&:to_i) unless Array === f
        reverse.reject.with_index{|_, i| f[-i].to_i.zero?}
    end
end
于 2012-08-23T05:04:34.537 回答