Ruby Enumerable#filter - extended Enumerable#select combined with Enumerable#collect
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.gitignore
Gemfile
LICENSE
README.rdoc
Rakefile
filter.gemspec

README.rdoc

Synopsys

Enumerable#filter - extended Enumerable#select

Examples

String filter (acts like Enumerable#grep):

[1, 2, 3, 'ab'].filter(/a/)              # => ['ab']
[1, 2, 3, '3'].filter('3')               # => ['3']

You can pass a Proc or Symbol. Methods and blocks are allowed too:

[1, 2, 3].filter(&:even?)                # => [2]
[1, 2, 3].filter(:even?)                 # => [2]
[1, 2, 4].filter { |num| num.even? }     # => [2, 4]

Enumerable#filter can match against enumerable items attributes. Like this:

[1, 2, 3, 4.2].filter :to_i => :even?    # => [2, 4]

If the block is supplied, each matching element is passed to it, and the block's result is stored in the output array.

[1, 2, 4].filter(&:even?) { |n| n + 1 }  # => [3, 5]

Enumerable#filter also accepts true or false as argument:

[0, false, 2, nil].filter(true)          # => [0, 2]
[0, false, 2, nil].filter(false)         # => [false, nil]

Enumerable#filter also supports OR operator! Just pass many patterns, they will be joined together with OR operator.

[0, 2, 3, 4].filter(:zero?, :odd?)       # => [0, 3]