10 Collections central: Enumerable and Enumerator
This chapter covers
- Mixing Enumerable into your classes
- The use of Enumerable methods in collection objects
- Strings as quasi-enumerable objects
- Sorting enumerables with the Comparable module
- Enumerators
All collection objects aren’t created equal—but an awful lot of them have many characteristics in common. In Ruby, common characteristics among many objects tend to reside in modules. Collections are no exception: collection objects in Ruby typically include the Enumerable module.
Classes that use Enumerable enter into a kind of contract: the class has to define an instance method called each, and in return, Enumerable endows the objects of the class with all sorts of collection-related behaviors. The methods behind these behaviors are defined in terms of each. In some respects, you might say the whole concept of a “collection” in Ruby is pegged to the Enumerable module and the methods it defines on top of each.
10.1 Gaining enumerability through each
10.2 Enumerable Boolean queries
10.3 Enumerable searching and selecting
10.3.1 Getting the first match with find
10.3.2 Getting all matches with find_all (a.k.a. select) and reject
10.3.3 Selecting on threequal matches with grep
10.3.4 Organizing selection results with group_by and partition
10.4 Element-wise enumerable operations
10.4.1 The first method
10.4.2 The take and drop methods
10.4.3 The min and max methods
10.5 Relatives of each
10.5.1 reverse_each
10.5.2 The each_with_index method (and each.with_index)
10.5.3 The each_slice and each_cons methods
10.5.4 The slice_ family of methods
10.5.5 The cycle method
10.5.6 Enumerable reduction with inject
10.6 The map method
10.6.1 The return value of map
10.6.2 In-place mapping with map!
10.7 Strings as quasi-enumerables
10.8 Sorting enumerables
10.8.1 Defining sort-order logic with a block
10.8.2 Concise sorting with sort_by
10.8.3 Sorting enumerables and the Comparable module
10.9 Enumerators and the next dimension of enumerability
10.9.1 Creating enumerators with a code block
10.9.2 Attaching enumerators to other objects