From: Rob Biedenharn Date: 2008-06-06T07:24:23+09:00 Subject: Re: Histogram On Jun 5, 2008, at 6:01 PM, Justin To wrote: > I've been looking around to learn about histograms, and haven't had > any > luck... can someone tell me how a histogram would work for something > like this: > > Name, Age > Bob, 2 > Jim, 2 > Eric, 4 > Rob, 5 Depending on how you get that data, FasterCSV might be a good option, but I'll just create a nested array for illustration. ages = [ ['Bob', 2], ['Jim',2], ['Eric',4], ['Rob',5] ] > How would I use a histogram to get a result like this: > > Age | Names > 2 | Bob, Jim > 4 | Eric > 5 | Rob > > Thanks in advance!!! So the answer you want is: (note that I'm using a Hash since the keys will be unique anyway) histogram = { 2 => ['Bob','Jim'], 4 => ['Eric'], 5 => ['Rob'] } So you could just use Enumerable#group_by (provided by the ActiveSupport gem from Rails; yes, you can use it by itself). Of course, it's also a simple matter to group them yourself: histogram = Hash.new { |h,k| h[k] = [] } # hash that defaults values to empty Arrays ages.each {|name,age| histogram[age] << name } If you need to produce that exact output: puts "Age | Names" histogram.sort_by {|age,names| age}.each do |age,names| puts "%-3d | %s"%[age, names*', '] end Age | Names 2 | Bob, Jim 4 | Eric 5 | Rob And I expect that you have a lot of thumbing through the Pickaxe to understand all that ;-) -Rob Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com