From: Jay Levitt Date: 2007-10-01T06:40:13+09:00 Subject: Re: Detecting number ranges On Fri, 28 Sep 2007 07:13:39 +0900, Harry Kakueki wrote: > Here is the same code with comments I probably should have included > the first time. Thanks! For my own educational purposes (and any future newbies reading this), I renamed a bunch of variables, extracted some temp variables and came up with the following. It still has one bug (doesn't handle non-contiguous ranges like [1, 2, 133]), but I think I could fix that on my own... db_server_pairs = [] server_dbs = {} # .scan will return an array of matches DATA.readlines.each do |line| db_server_pairs << line.scan(/\d+/).map{|num| num.to_i} end servers = db_server_pairs.map{|pair| pair[1]}.uniq #=> [..., 7, ...] servers.each do |server| my_pairs = db_server_pairs.select{|pair| pair[1] == server} #=> [[8, 7], [10, 7], ...] server_dbs[server] = my_pairs.sort.map {|pair| pair[0]} #=> [8, 9, 10] end server_dbs.keys.sort.each do |server| first = server_dbs[server][0] last = server_dbs[server][-1] print "server #{server} handles database #{first} to #{last}\n" end __END__ database 8 is on server 7 database 10 is on server 7 database 9 is on server 7 database 5 is on server 9 database 1 is on server 3 database 2 is on server 3 database 133 is on server 3 database 4 is on server 144 -- Jay Levitt | Boston, MA | My character doesn't like it when they Faster: jay at jay dot fm | cry or shout or hit. http://www.jay.fm | - Kristoffer