Robert Keller wrote: > The data lines look like this: > > " category value" > > case top_event[0].lstrip.rstrip > when "Redo size:" > > $redo_cnt[0] += 1 > $redo_cnt[1] += top_event[1].to_f > > > > when "Logical reads:" > > $log_read_cnt[0] += 1 > $log_read_cnt[1] += top_event[1].to_f This might be easier to understand: #Create a hash, so that when you use a #key that doesn't exist, it creates the key, #assigns it the array [0,0], and returns the #array: categories = Hash.new() do |hash, key| hash[key] = [0,0] end #Loop over each line in a file: File.foreach("data.txt") do |line| arr = line.split(":") cat = arr[0].strip val = Float(arr[1]) #causes an error if can't convert categories[cat][0] += 1 categories[cat][1] += val end p categories puts categories["Make pie"][0] puts categories["Redo size"][1] Using this data: Redo size: 1.1 Logical reads: 2.1 Redo size: 1.1 Hello world: 3.1 Make pie: 4.1 Hello world: 3.1 Make pie: 4.1 Make pie: 4.1 this is the output: {"Make pie"=>[3, 12.3], "Hello world"=>[2, 6.2], "Redo size"=>[2, 2.2], "Logical reads"=>[1, 2.1]} 3 2.2 -- Posted via http://www.ruby-forum.com/.