On this page
End of Life Ruby 3.2 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?: Returnstrueifself == object,falseotherwise. -
all?: Returnstrueif all elements meet a specified criterion;falseotherwise. -
any?: Returnstrueif any element meets a specified criterion;falseotherwise. -
none?: Returnstrueif no element meets a specified criterion;falseotherwise. -
one?: Returnstrueif 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:
-
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 ofself, based either on a givenobjector a given block. -
slice_before: Returns a new Enumerator whose entries are a partition ofself, based either on a givenobjector a given block. -
slice_when: Returns a new Enumerator whose entries are a partition ofselfbased 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_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 fromeach_slice). -
reverse_each: Calls the block with each successive element, in reverse order.
Other Methods
-
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 Classes
These Ruby core classes include (or extend) Enumerable:
These Ruby standard library 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]
-