# Multidimensional hash

**URL:** <https://www.ruby-forum.com/t/multidimensional-hash/108558>\
**Category:** IT\
**Created:** [July 4, 2007, 5:54pm UTC](https://www.ruby-forum.com/t/multidimensional-hash/108558 "2007-07-04T17:54:28Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lucea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ea5d25/32.png) [@Lucea](https://www.ruby-forum.com/u/Lucea)\
**Post date:** [July 4, 2007, 5:54pm UTC](https://www.ruby-forum.com/t/multidimensional-hash/108558/1 "2007-07-04T17:54:28Z")

</div>

Salve a tutti 🙂

Mi pare di aver capito che non esistono hash a più dimensioni in ruby,  
quindi chiedevo a voi se sapreste dirmi come gestire la cosa…  
Ho provato a cercare qualcosa di già pronto ma le soluzioni che ho trovato  
non funzionano (ma può anche essere che io le usi male 🙂 ).  
Qualcuno sa aiutarmi?  
Grazie!

---

<div class="post-metadata">

**Author:** ![Lucea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ea5d25/32.png) [@Lucea](https://www.ruby-forum.com/u/Lucea)\
**Post date:** [July 4, 2007, 6:01pm UTC](https://www.ruby-forum.com/t/multidimensional-hash/108558/2 "2007-07-04T18:01:29Z")

</div>

On 7/4/07, Lucea [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Salve a tutti 🙂
> 
> Mi pare di aver capito che non esistono hash a più dimensioni in ruby,  
> quindi chiedevo a voi se sapreste dirmi come gestire la cosa…  
> Ho provato a cercare qualcosa di già pronto ma le soluzioni che ho trovato  
> non funzionano (ma può anche essere che io le usi male 🙂 ).  
> Qualcuno sa aiutarmi?

prova a scrivere un esempio di come lo vorresti usare e che risultati ti  
aspetteresti.

---

<div class="post-metadata">

**Author:** ![Lucea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ea5d25/32.png) [@Lucea](https://www.ruby-forum.com/u/Lucea)\
**Post date:** [July 4, 2007, 6:09pm UTC](https://www.ruby-forum.com/t/multidimensional-hash/108558/3 "2007-07-04T18:09:29Z")

</div>

Se definisco:

rec1.campo1= “aaa”  
rec1.campo2= “bbb”

hsh[str\_a1][str\_b1] = rec1  
hsh[str\_a1][str\_b2] = 2  
hsh[str\_a2][str\_b1] = …  
…

Ottengo:

p hsh[str\_a1][str\_b2] # =\>2  
p hsh[str\_a1][str\_b1].campo1 # =\>“aaa”  
p hsh[str\_a1][str\_b1].campo2 # =\>“bbb”

---

<div class="post-metadata">

**Author:** ![Lucea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ea5d25/32.png) [@Lucea](https://www.ruby-forum.com/u/Lucea)\
**Post date:** [July 4, 2007, 6:19pm UTC](https://www.ruby-forum.com/t/multidimensional-hash/108558/4 "2007-07-04T18:19:31Z")

</div>

Grazie mille! Sempre velocissimi. 🙂  
Silvia

---

<div class="post-metadata">

**Author:** ![Lucea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ea5d25/32.png) [@Lucea](https://www.ruby-forum.com/u/Lucea)\
**Post date:** [July 4, 2007, 6:16pm UTC](https://www.ruby-forum.com/t/multidimensional-hash/108558/5 "2007-07-04T18:16:31Z")

</div>

hsh = {:str\_a1 =\> {:str\_b1 =\> rec1}}  
hsh[:str\_a1][:str\_b1].campo1 #=\> “aaa”  
hsh[:str\_a1][:str\_b1].campo2 #=\> “bbb”

Ciao,  
Antonio

---

<div class="post-metadata">

**Author:** ![Lucea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ea5d25/32.png) [@Lucea](https://www.ruby-forum.com/u/Lucea)\
**Post date:** [July 4, 2007, 7:10pm UTC](https://www.ruby-forum.com/t/multidimensional-hash/108558/6 "2007-07-04T19:10:37Z")

</div>

— Lucea [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Grazie mille! Sempre velocissimi. 🙂  
> Silvia

tanto perché rimanga negli archivi: puoi anche fare un  
Hash che sia di default n-dimensionale, col vantaggio  
(o svantaggio a seconda dei casi) che non ti becchi  
eccezioni di tipo NoMethodError:

> > usual = {:a=\> {:b=\>1}}  
> > =\> {:a=\>{:b=\>1}}  
> > usual[:a][:b]  
> > =\> 1  
> > usual[:b][:b]  
> > NoMethodError: undefined method `[]’ for nil:NilClass  
> > from (irb):3  
> > hash\_builder = proc { |h,k| h[k] =  
> > Hash.new(&hash\_builder) }  
> > =\> #Proc:0x02e13758@:4(irb)  
> > magic = Hash.new(&hash\_builder)  
> > =\> {}  
> > magic[:a][:b]  
> > =\> {}  
> > magic[:a][:b]=10  
> > =\> 10  
> > magic[:b][:b][:c][:d] = 10  
> > =\> 10  
> > magic  
> > =\> {:a=\>{:b=\>10}, :b=\>{:b=\>{:c=\>{:d=\>10}}}}

more info sul wiki:  
[http://ruby-it.org/pages/Hash+Infinito](http://ruby-it.org/pages/Hash+Infinito)

–  
Goto 10: [http://www.goto10.it](http://www.goto10.it)  
blog it: [http://riffraff.blogsome.com](http://riffraff.blogsome.com)  
blog en: [http://www.riffraff.info](http://www.riffraff.info)

* * *

Inbox full of unwanted email? Get leading protection and 1GB storage  
with All New Yahoo! Mail. [http://uk.docs.yahoo.com/nowyoucan.html](http://uk.docs.yahoo.com/nowyoucan.html)
