Ruby find_all vs select, what’s the deal?Elizabeth KosowskiBlockedUnblockFollowFollowingFeb 10A month ago I knew absolutely nothing about the programming language Ruby.
I had just interviewed using Javascript for Flatiron School where they teach both Javascript AND Ruby.
Fast forward to now I can’t get enough of it!Getting accepted to Flatiron School was just the beginning.
One hundred hours of Ruby pre-work shortly followed where we learned tons of Ruby methods that we would need to build functional apps.
Of these methods in Ruby, find_all and select stood out to me because they seemed like they accomplished the same thing.
Initial research led me to to find…find_allselectWait, aren’t they identical!?Well, sorta.
A deeper dive into the Ruby docs led me to discover that there is a bit more under the hood.
An object is enumerable if it describes a set of items and a method to loop over each of them.
In Ruby, Enumerable#find_all and Enumerable#select are the same code.
Arrays in Ruby inherit from Enumerable, so running find_all or select on an Array in Ruby will yield the same result.
BUT it starts to get complicated when you are looping over a hash.
A hash is a collection of key value pairs.
If you’re more familiar with Javascript, a hash in Ruby is like an object in Javascript.
**On a hash, find_all returns an array**hash = {a: 1, b: 2, c: 3, d: 4}hash.
find_all do |key, value| value.
odd?end#would return [[:a, 1], [:c, 3]] because the find_all method is #inherited from Enumerable**On a hash, select returns a hash instead of an array**hash = {a: 1, b: 2, c: 3, d: 4}hash.
select do |key, value| value.
odd?end#would return {a:1, c:3}So why do find_all and select yield different results when running on a hash?.With a Hash, find_all still inherits from Enumerable but select is redefined to return a Hash instead of an Array.
Subtle but important difference!Moral of the story, think about what you want to return when using select or find_all (and really any method in software engineering) before you use it!Yay, we did it!Sources:class Hash – Documentation for Ruby 2.
0.
0Edit descriptiondocs.
ruby-lang.
orgModule: Enumerable (Ruby 2.
2.
3)Module : Enumerable – Ruby 2.
2.
3ruby-doc.
orgModule: Enumerable (Ruby 2.
2.
3)Module : Enumerable – Ruby 2.
2.
3ruby-doc.
orgRuby's magical Enumerable moduleIt's time for another episode of Ruby Magic!.This time, we'll look at one of Ruby's most magical features, which…blog.
appsignal.
comIs "find_all" and "select" the same thing?These two statements give me the same results: [1,2,3,4].
find_all { |x| x.
even?.} [1,2,3,4].
select{ |x| x.
even?.} Is…stackoverflow.
com.. More details