Can I append hash to hashes?

I need to do a hash some kind like this:
hsh = {Member => {email => Email, name => Name, lastname => Lastname}}

But I get a hash in foreach loop so I need to append a hash to hashes.
e.g.
First round: Member => {email => Email}
Second round: Member => {email => Email, name => Name}
Third round: Member => {email => Email, name => Name, lastname =>
Lastname}

Can I do that and how?
In my case I cannot do the array because I need to use this hash to
generate yaml later.
If I do as the array, the formatting what I get in yaml is not what I
need.
Pls help…

maybe I cannot understand your problem (?)

hsh = {:member => {:email => “Email”, :name => “Name”, :lastname =>
“Lastname”}}
p hsh

internal_h = {:email => “Email”, :name => “Name”, :lastname =>
“Lastname”}
external_h = {}
external_h[:member] = internal_h
p external_h

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am 22.04.2011 09:22, schrieb Siratinee S.:

Can I do that and how?
In my case I cannot do the array because I need to use this hash to
generate yaml later.
If I do as the array, the formatting what I get in yaml is not what I
need.
Pls help…

Have a look at the Hash#merge and Hash#merge! methods.

http://www.ruby-doc.org/core/classes/Hash.html#M000759
http://www.ruby-doc.org/core/classes/Hash.html#M000758

Vale,
Marvin
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJNsTQQAAoJELh1XLHFkqha4wwH/RbyOJ6I1HZip5oeAORqYfdB
NdZ6g9YNUh3Y/jX9h7UOFptvJIO8E7CMCgP7ptfqk80jOr5AxEzaBAPY3HRqjGIj
O0uIt8FIu078KmNiBeP2dVHMKCUEPHGWrfGV4pOYkTEDBO7pmkF/KTEuggIdxHGC
gSziditMIpdRqSMeDHufscTCx8OrdU05aLNDiuL8nCpf+HS1Ou5Kyww5FBYbhhD5
Il4BKJyRhZTRYtoAXoSyb9nl+2wZ6/yP36ymQ/37GxmIfVpmQys7mjukjy1mVRbf
OPFqfOdhwnavrzhKYuZJvGMHxegQztjOvsDDZ8QvvxcCNP1Fg4EMLcjnckkEOiI=
=k4QL
-----END PGP SIGNATURE-----

Actually, I need to do like in array which I can use << to assign more
value into array. Anyways can I do that in hash?

thanks Robert, it works.

On Fri, Apr 22, 2011 at 10:13 AM, Siratinee S.
[email protected] wrote:

Actually, I need to do like in array which I can use << to assign more
value into array. Anyways can I do that in hash?

Sure there are two ways, the destructive one, in which the receiver is
modified with #update

h={:a=>42}
=> {:a=>42}

h.update(:b => 43)
=> {:b=>43, :a=>42}

h
=> {:b=>43, :a=>42}

or the constructive, in which the receiver is not modified, with #merge

h={:a=>42}
=> {:a=>42}

h.merge(:b => 43)
=> {:b=>43, :a=>42}

h
=> {:a=>42}

Be aware of the fact, that in case of conflicting keys the values of
the argument are used, this can be handled by the block form of
#update and #merge, as described here
http://www.rubydoc.info/stdlib/core/1.9.2/Hash
HTH
Robert

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs