On this page
End of Life Ruby 3.1 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →
Enumerable
What’s Here
Module Enumerable provides methods that are useful to a collection class for:
Methods for Querying
These methods return information about the Enumerable other than the elements themselves:
include?,member?-
Returns
trueif self == object,falseotherwise. all?-
Returns
trueif all elements meet a specified criterion;falseotherwise. any?-
Returns
trueif any element meets a specified criterion;falseotherwise. none?-
Returns
trueif no element meets a specified criterion;falseotherwise. one?-
Returns
trueif exactly one element meets a specified criterion;falseotherwise. count-
Returns the count of elements, based on an argument or block criterion, if given.
tally-
Returns a new Hash containing the counts of occurrences of each element.
Methods for Fetching
These methods return entries from the Enumerable, without modifying it:
Leading, trailing, or all elements:
entries,to_a-
Returns all elements.
first-
Returns the first element or leading elements.
take-
Returns a specified number of leading elements.
drop-
Returns a specified number of trailing elements.
take_while-
Returns leading elements as specified by the given block.
drop_while-
Returns trailing elements as specified by the given block.
Minimum and maximum value elements:
min-
Returns the elements whose values are smallest among the elements, as determined by
<=>or a given block. max-
Returns the elements whose values are largest among the elements, as determined by
<=>or a given block. minmax-
Returns a 2-element Array containing the smallest and largest elements.
min_by-
Returns the smallest element, as determined by the given block.
max_by-
Returns the largest element, as determined by the given block.
minmax_by-
Returns the smallest and largest elements, as determined by the given block.
Groups, slices, and partitions:
group_by-
Returns a Hash that partitions the elements into groups.
partition-
Returns elements partitioned into two new Arrays, as determined by the given block.
slice_after-
Returns a new Enumerator whose entries are a partition of
self, based either on a givenobjector a given block. slice_before-
Returns a new Enumerator whose entries are a partition of
self, based either on a givenobjector a given block. slice_when-
Returns a new Enumerator whose entries are a partition of
selfbased on the given block. chunk-
Returns elements organized into chunks as specified by the given block.
chunk_while-
Returns elements organized into chunks as specified by the given block.
Methods for Searching and Filtering
These methods return elements that meet a specified criterion.
find,detect-
Returns an element selected by the block.
find_all,filter,select-
Returns elements selected by the block.
find_index-
Returns the index of an element selected by a given object or block.
reject-
Returns elements not rejected by the block.
uniq-
Returns elements that are not duplicates.
Methods for Sorting
These methods return elements in sorted order.
sort-
Returns the elements, sorted by
<=>or the given block. sort_by-
Returns the elements, sorted by the given block.
Methods for Iterating
each_entry-
Calls the block with each successive element (slightly different from each).
each_with_index-
Calls the block with each successive element and its index.
each_with_object-
Calls the block with each successive element and a given object.
each_slice-
Calls the block with successive non-overlapping slices.
each_cons-
Calls the block with successive overlapping slices. (different from
each_slice). reverse_each-
Calls the block with each successive element, in reverse order.
Other Methods
map,collect-
Returns objects returned by the block.
filter_map-
Returns truthy objects returned by the block.
flat_map,collect_concat-
Returns flattened objects returned by the block.
grep-
Returns elements selected by a given object or objects returned by a given block.
grep_v-
Returns elements selected by a given object or objects returned by a given block.
reduce,inject-
Returns the object formed by combining all elements.
sum-
Returns the sum of the elements, using method +++.
zip-
Combines each element with elements from other enumerables; returns the n-tuples or calls the block with each.
cycle-
Calls the block with each element, cycling repeatedly.
Usage
To use module Enumerable in a collection class:
-
Include it:
Exampleinclude Enumerable
-
Implement method each which must yield successive elements of the collection. The method will be called by almost any Enumerable method.
Example:
class Foo include Enumerable def each yield 1 yield 1, 2 yield end end Foo.new.each_entry{ |element| p element }
Output:
1 [1, 2] nil
Enumerable in Ruby Core Classes
Some Ruby classes include Enumerable:
Virtually all methods in Enumerable call method each in the including class:
-
Hash#eachyields the next key-value pair as a 2-element Array. -
Struct#eachyields the next name-value pair as a 2-element Array. -
For the other classes above, each yields the next object from the collection.
About the Examples
The example code snippets for the Enumerable methods:
-
Always show the use of one or more Array-like classes (often Array itself).
-
Sometimes show the use of a Hash-like class. For some methods, though, the usage would not make sense, and so it is not shown. Example:
tallywould find exactly one of each Hash entry.
Instance methods 61
Ruby version changes 3
-
3.1
-
Enumerable#compactis added. [Feature #17312] -
Enumerable#tallynow accepts an optional hash to count. [Feature #17744] -
Enumerable#each_consand each_slice to return a receiver. [GH-1509]Example[1, 2, 3].each_cons(2){} # 3.0 => nil # 3.1 => [1, 2, 3] [1, 2, 3].each_slice(2){} # 3.0 => nil # 3.1 => [1, 2, 3]
-