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