Changing hash key

I am working with a script to record accounts and their balances. I
need to check the key in a hash and if the account number is already
there just add the blanace to the value. So far this is what I have and
its not quite doing what I need. Is my test not right? I get all the
account numbers and their balances instead of a list with the accounts
and balances without the duplicate account numbers.

Thanks,
Tim

  sktylist = Hash.new("")
              if sktylist.has_key?('@acctnum')
                sktylist.merge!('@acctnum' => 'value')
else
                sktylist[@acctnum] = [value]
              end
              sktylist.each { |key, value| puts "#{key} equals #{value}"
}

···

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

This is not working because you're using a string called '@acctnum'
instead of the content of the variable @acctnum inside both has_key? and
merge functions

First remove ' signs from that functions, next I suggest you to use
symbols instead
of variables for keys (@acctnum.to_sym instead of @acctnum)

Bye

sktylist = Hash.new("")
             if sktylist.has_key?('@acctnum')
               sktylist.merge!('@acctnum' => 'value')
else
               sktylist[@acctnum] = [value]
             end
             sktylist.each { |key, value| puts "#{key} equals #{value}"
}

···

On Wed, May 7, 2008 at 1:04 PM, Tim Wolak <tim.wolak@gmail.com> wrote:

I am working with a script to record accounts and their balances. I
need to check the key in a hash and if the account number is already
there just add the blanace to the value. So far this is what I have and
its not quite doing what I need. Is my test not right? I get all the
account numbers and their balances instead of a list with the accounts
and balances without the duplicate account numbers.

Thanks,
Tim

  sktylist = Hash.new("")
              if sktylist.has_key?('@acctnum')
                sktylist.merge!('@acctnum' => 'value')
  else
                sktylist[@acctnum] = [value]
              end
              sktylist.each { |key, value| puts "#{key} equals #{value}"
}
--
Posted via http://www.ruby-forum.com/\.

--
Go outside! The graphics are amazing!

How about:

   sktylist = Hash.new
   sktylist.[@acctnum] ||= 0
   sktylist.[@acctnum] += value

by
TheR

···

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

Sandro Paganotti wrote:

This is not working because you're using a string called '@acctnum'
instead of the content of the variable @acctnum inside both has_key? and
merge functions

First remove ' signs from that functions, next I suggest you to use
symbols instead
of variables for keys (@acctnum.to_sym instead of @acctnum)

Bye

sktylist = Hash.new("")
             if sktylist.has_key?('@acctnum')
               sktylist.merge!('@acctnum' => 'value')
else
               sktylist[@acctnum] = [value]
             end
             sktylist.each { |key, value| puts "#{key} equals #{value}"
}

I've created the hash and can store all keys and values however I'm
trying += to add the balances which is value in the hash. So far the
accounts that have the same number are not being consolidated into one
key, value.... Can someone tell me what I'm doing wrong with this?

Thanks,
Tim

  sktylist = Hash.new("")
            sktylist[@acctnum] += [value]
         p sktylist

···

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

Damjan Rems wrote:

sktylist = Hash.new
sktylist.[@acctnum] ||= 0

sktylist = Hash.new(0)

···

--
NP: Depeche Mode - Strangelove
Jabber: sepp2k@jabber.org
ICQ: 205544826

Given the limited amount of information I have I would guess that you
might doing this

   TypeError: can't convert Array into String

wrong.

HTH
Robert

···

On Wed, May 7, 2008 at 7:00 PM, Tim Wolak <tim.wolak@gmail.com> wrote:

Sandro Paganotti wrote:
> This is not working because you're using a string called '@acctnum'
> instead of the content of the variable @acctnum inside both has_key? and
> merge functions
>
> First remove ' signs from that functions, next I suggest you to use
> symbols instead
> of variables for keys (@acctnum.to_sym instead of @acctnum)
>
> Bye
>
> sktylist = Hash.new("")
> if sktylist.has_key?('@acctnum')
> sktylist.merge!('@acctnum' => 'value')
> else
> sktylist[@acctnum] = [value]
> end
> sktylist.each { |key, value| puts "#{key} equals #{value}"
> }

I've created the hash and can store all keys and values however I'm
trying += to add the balances which is value in the hash. So far the
accounts that have the same number are not being consolidated into one
key, value.... Can someone tell me what I'm doing wrong with this?

Thanks,
Tim

  sktylist = Hash.new("")
            sktylist[@acctnum] += [value]
         p sktylist
--

--
http://ruby-smalltalk.blogspot.com/

---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein