From: Robert Klemme Date: 2011-07-15T20:04:53+09:00 Subject: Re: Elegant selection of closest number? On Fri, Jul 15, 2011 at 12:52 PM, 7stud -- wrote: > Philip Rhoades wrote in post #1010919: >> People, > > buckets = [ >  0.1, >  0.2, >  0.3, >  0.4, >  0.5, > ] > > data = [ >  0.00, >  0.14, >  0.19, >  0.24, >  0.25, >  0.41, >  1.00, > ] > > results = Hash.new {|hash, key| hash[key] = []} > > data.each do |num| >  rounded = num.round(1) > >  first = buckets.first >  last = buckets.last > >  if rounded < first >    results[first] << num >  elsif rounded > last >    results[last] << num >  else >    results[rounded] << num >  end > end > > p results > > --output:-- > {0.1=>[0.0, 0.14], 0.2=>[0.19, 0.24], 0.3=>[0.25], 0.4=>[0.41], > 0.5=>[1.0]} buckets and data as above buckets.sort! result = data.group_by do |x| delta = nil buck = nil buckets.each do |b| d = (x - b).abs break if delta && d > delta delta = d buck = b end buck end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/