Skip to content

Instantly share code, notes, and snippets.

@bowsersenior
Created July 25, 2012 00:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bowsersenior/3173712 to your computer and use it in GitHub Desktop.
Save bowsersenior/3173712 to your computer and use it in GitHub Desktop.
Find every possible combination of a hash
class Hash
def every_combo
arr = self.to_a
1.upto(arr.size).inject([]) do |memo, n|
memo << arr.combination(n).to_a.map{|a| Hash[a] }
memo
end.flatten
end
end
# Sample usage
#
# > {
# :a => 1,
# :b => 2,
# :c => 3,
# :d => 4,
# :e => 5
# }.every_combo
#
# # =>
# [
# [ 0] {
# :a => 1
# },
# [ 1] {
# :b => 2
# },
# [ 2] {
# :c => 3
# },
# [ 3] {
# :d => 4
# },
# [ 4] {
# :e => 5
# },
# [ 5] {
# :a => 1,
# :b => 2
# },
# [ 6] {
# :a => 1,
# :c => 3
# },
# [ 7] {
# :a => 1,
# :d => 4
# },
# [ 8] {
# :a => 1,
# :e => 5
# },
# [ 9] {
# :b => 2,
# :c => 3
# },
# [10] {
# :b => 2,
# :d => 4
# },
# [11] {
# :b => 2,
# :e => 5
# },
# [12] {
# :c => 3,
# :d => 4
# },
# [13] {
# :c => 3,
# :e => 5
# },
# [14] {
# :d => 4,
# :e => 5
# },
# [15] {
# :a => 1,
# :b => 2,
# :c => 3
# },
# [16] {
# :a => 1,
# :b => 2,
# :d => 4
# },
# [17] {
# :a => 1,
# :b => 2,
# :e => 5
# },
# [18] {
# :a => 1,
# :c => 3,
# :d => 4
# },
# [19] {
# :a => 1,
# :c => 3,
# :e => 5
# },
# [20] {
# :a => 1,
# :d => 4,
# :e => 5
# },
# [21] {
# :b => 2,
# :c => 3,
# :d => 4
# },
# [22] {
# :b => 2,
# :c => 3,
# :e => 5
# },
# [23] {
# :b => 2,
# :d => 4,
# :e => 5
# },
# [24] {
# :c => 3,
# :d => 4,
# :e => 5
# },
# [25] {
# :a => 1,
# :b => 2,
# :c => 3,
# :d => 4
# },
# [26] {
# :a => 1,
# :b => 2,
# :c => 3,
# :e => 5
# },
# [27] {
# :a => 1,
# :b => 2,
# :d => 4,
# :e => 5
# },
# [28] {
# :a => 1,
# :c => 3,
# :d => 4,
# :e => 5
# },
# [29] {
# :b => 2,
# :c => 3,
# :d => 4,
# :e => 5
# },
# [30] {
# :a => 1,
# :b => 2,
# :c => 3,
# :d => 4,
# :e => 5
# }
# ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment