Skip to content

Maintenance Ruby 3.4 gets fixes, but no new features. Switch to Ruby 4.0 →

instance method

Array#combination

(::int n) { (::Array[Elem]) -> void } -> self
(::int n) -> ::Enumerator[::Array[Elem], self]
combination(count) {|element| ... } → self
combination(count) → new_enumerator

When a block and a positive integer-convertible object argument count (0 < count <= self.size) are given, calls the block with each combination of self of size count; returns self:

Example
a = %w[a b c]                                   # => ["a", "b", "c"]
a.combination(2) {|combination| p combination } # => ["a", "b", "c"]

Output:

Example
["a", "b"]
["a", "c"]
["b", "c"]

The order of the yielded combinations is not guaranteed.

When count is zero, calls the block once with a new empty array:

Example
a.combination(0) {|combination| p combination }
[].combination(0) {|combination| p combination }

Output:

Example
[]
[]

When count is negative or larger than self.size and self is non-empty, does not call the block:

Example
a.combination(-1) {|combination| fail 'Cannot happen' } # => ["a", "b", "c"]
a.combination(4)  {|combination| fail 'Cannot happen' } # => ["a", "b", "c"]

With no block given, returns a new Enumerator.

Related: Array#permutation; see also Methods for Iterating.

See also #collect! #compact #collect #compact! also in 4.1 · 4.0 · 3.3 · 3.2 · 3.1 · 3.0