2

別の配列またはビットマスクに基づいて配列をフィルタリングできるようにする Array メソッドが Ruby にあるかどうか疑問に思っていました。

以下は、説明のための例と簡単な実装です。

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 に答える