Method: Hash#shrink
- Defined in:
- lib/propr/shrink/hash.rb
#shrink ⇒ Array<Hash>
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/propr/shrink/hash.rb', line 3 def shrink return Array.new if empty? array = to_a array.combination(size - 1).map{|pairs| Hash[pairs] }.tap do |shrunken| shrunken << Hash.new size.times do |n| head = array[0, n] tail = array[n+1..-1] k, v = array[n] shrunken.concat(v.shrink.map{|m| Hash[head + [[k, m]] + tail] }) end end end |