On Jan 12, 2008, at 10:24 AM, Bil Kleb wrote: > unused.each do |source,routines| > orphans = routines.uniq > orphans.delete_if do |orphan| > repeated = routines.find_all{ |routine| routine == orphan }.size > repeated != MagicNumber > end > unused[source] = orphans > end > unused.delete_if{ |h,k| k.empty? } Here is my attempt. It uses Symbol#to_proc. module Enumerable def frequency inject(Hash.new(0)) { |r, e| r[e] += 1; r } end end def clense(data, magic) data.inject({}) { |r, (src, rlist)| l = rlist.frequency.select { |r, c| c == magic }.map(&:first) r[src] = l unless l.empty? r } end data = { :gone => [ 0, 1, 2 ], :dups => [ 0, 0, 1, 1, 2, 2], :onedups => [ 0, 1, 1, 2, 2, 2], :threes => [ 0, 0, 0, 1, 1, 1, 2,2,2] } p clense(data, 2)