### Creating Combinations of Sets/Arrays/Things in Ruby

I was looking for a way to create combinations of things in Ruby and I found an article by Uncle Bob detailing his attempt at writing a combination generator in Ruby. I modified it slightly to use an array of items, instead of simple indexes.

The above code prints out:

If you don't want these types of combinations, there is a Ruby library for calculating Permutations which will give you all the different permutations, or orderings, of a set of things.

require 'pp'

def choose(n, k)

return [[]] if n.nil? || n.empty? && k == 0

return [] if n.nil? || n.empty? && k > 0

return [[]] if n.size > 0 && k == 0

c2 = n.clone

c2.pop

new_element = n.clone.pop

choose(c2, k) + append_all(choose(c2, k-1), new_element)

end

def append_all(lists, element)

lists.map { |l| l << element }

end

all = [:a, :b, :c, :d]

pp choose(all,3)

The above code prints out:

`[[:a, :b, :c], [:a, :b, :d], [:a, :c, :d], [:b, :c, :d]]`

If you don't want these types of combinations, there is a Ruby library for calculating Permutations which will give you all the different permutations, or orderings, of a set of things.