Building an array of hash tables

I know how to build a hash table.

frequencies = Hash.new(0)
arr = line.split(',')
frequencies[arr[0]] += 1

and I know how to build an array
myArr = Array.new

but I want to know how to build an array of hash tables, as I need to
keep a set of
hash-tables sepparated, each one corresponding to an index of an array
that is split.

Any help appreciated.
Ted.

···

--
Posted via http://www.ruby-forum.com/.

Ted Flethuseo wrote:

I know how to build a hash table.

frequencies = Hash.new(0)
arr = line.split(',')
frequencies[arr[0]] += 1

and I know how to build an array
myArr = Array.new

but I want to know how to build an array of hash tables, as I need to
keep a set of
hash-tables sepparated, each one corresponding to an index of an array
that is split.

Any help appreciated.
Ted.

Here's a typical ruby idiom for doing that:

   a = []

   i = 3
   s = "foo"
   a[i] ||= Hash.new(0)
   a[i][s] += 1

   i = 7
   s = "bar"
   a[i] ||= Hash.new(0)
   a[i][s] += 1

   i = 3
   s = "foo"
   a[i] ||= Hash.new(0)
   a[i][s] += 1

   p a
   # ==> [nil, nil, nil, {"foo"=>2}, nil, nil, nil, {"bar"=>1}]

You can wrap that up in a class if you like:

   class Counter
     def initialize
       @a = []
     end

     def count index, obj
       h = @a[index] ||= Hash.new(0)
       h[obj] += 1
     end
   end