On 9/23/07, SpringFlowers AutumnMoon <summercoolness / gmail.com> wrote:
> for the hash
>
> ["apple" => 3, "banana" => 2]
>
> is there an instant way to tally up all the counts?  (instead of looping
> through all keys and add up all counts, because the hash can be very
> big, like thousands of items, and looping can be quite expensive for CPU
> time)
>
> does the following look right?
>
> class Tally < Hash
>
>  attr_reader :total
>
>  def initialize
>    @total = 0
>    super(0)
>  end
>
>  def []=(key, new_value)
>    @total -= self[key]   # previous value goes
Nope RHS can be nil
>    @total += new_value   # new value in
>
>    super
I would put super first just in case it crashes anyway

      old_value = fetch(key,0)
      begin
          super
          @total += new_value - old_value
     rescue

HTH
Robert
-- 
I'm an atheist and that's it. I believe there's nothing we can know
except that we should be kind to each other and do what we can for
other people.
-- Katharine Hepburn