How to create hash of hash?

hashx = { key1 => {key1 => key1val1, key2 => key1val2}, key2 => {key1 =>
key2val1, key2 => key2val2} }

If I want to insert a hash in the 1st level, how to do?

key3_hash = {key1 => key3val1, key2 => key3val2}
hashx[key3] = key3_hash
# Is there a better way to write this? I want to assign the
programmatically

How about adding to the 2nd level hash?

Say
anon_hash = hashx[key1]
anon_hash[key3] = {key3 => key1val3}
hashx[key1] = anon_hash
# is there a better way to do this?

hashx = { key1 => {key1 => key1val1, key2 => key1val2}, key2 => {key1 =>
key2val1, key2 => key2val2} }

If I want to insert a hash in the 1st level, how to do?

key3_hash = {key1 => key3val1, key2 => key3val2}
hashx[key3] = key3_hash
# Is there a better way to write this? I want to assign the
programmatically

Not quite sure what you're getting at, but what's wrong with
hashx[key3] = {key1 => key3val1, key2 => key3val2} ?

How about adding to the 2nd level hash?

Say
anon_hash = hashx[key1]
anon_hash[key3] = {key3 => key1val3}
hashx[key1] = anon_hash
# is there a better way to do this?

why not just hashx[key1][key3]=key1val3 ? You don't need all those
intermediate steps.

Fred

Maybe he's dealing with really large hashes - or just many operations
on them - that having to reference the first sub-hash via the parent
hash every time would give a significant degradation in performance. I
still prefer the approach you mentioned, though.

Erol Fornoles wrote:

why not just hashx[key1][key3]=key1val3 ? You don't need all those
intermediate steps.

Fred

Maybe he's dealing with really large hashes - or just many operations
on them - that having to reference the first sub-hash via the parent
hash every time would give a significant degradation in performance. I
still prefer the approach you mentioned, though.

hashx[key1][key3] = key1val3 will give an error if hashx[key1] is null.
This is how I did it in perl, but ruby isn't as forgiving.

Also, I want to be able to build an arbitrarily deep hash. Say
hashx[key1][key11][key111]...[key11111].

The end goal is to build a hash that I can build an YUI treeview on. So
I need to build the tree, then loop through the keys to create the
TreeNode.

Erol Fornoles wrote:

hashx[key1][key3] = key1val3 will give an error if hashx[key1] is null.
This is how I did it in perl, but ruby isn't as forgiving.

hash = Hash.new {|h,k| h[k]=Hash.new &h.default_proc}

Mwahahahahaha

Fred