# Hash

**URL:** <https://www.ruby-forum.com/t/hash/140196>\
**Category:** IT\
**Created:** [June 11, 2008, 7:58pm UTC](https://www.ruby-forum.com/t/hash/140196 "2008-06-11T19:58:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![njna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ac8455/32.png) [@njna](https://www.ruby-forum.com/u/njna)\
**Post date:** [June 11, 2008, 7:58pm UTC](https://www.ruby-forum.com/t/hash/140196/1 "2008-06-11T19:58:29Z")

</div>

Salve a tutti!

qualcuno sa spiegarmi cosa vuol dire il seguente codice?

tmp=Hash.new(0)  
for el in @lista  
gra=tmp[el.aut][0]  
dim=tmp[el.aut][1]  
tmp[el.aut]=[el.gra+gra,el.dim+dim]  
end

grazie a tutti!

---

<div class="post-metadata">

**Author:** ![njna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ac8455/32.png) [@njna](https://www.ruby-forum.com/u/njna)\
**Post date:** [June 11, 2008, 8:13pm UTC](https://www.ruby-forum.com/t/hash/140196/2 "2008-06-11T20:13:50Z")

</div>

Ciao Njna

Njna N. wrote:

> Salve a tutti!
> 
> qualcuno sa spiegarmi cosa vuol dire il seguente codice?
> 
> tmp=Hash.new(0)

crea un hash con valore di default 0  
(cioe’ se accedi con una chiave che non esiste nell’hash, ti ritorna 0)

> for el in @lista  
> gra=tmp[el.aut][0]

anche se tmp e’ vuota, tmp[…] ritorna 0,  
e 0[…] ritorna 0 (mai saputo!)

> ```
> dim=tmp[el.aut][1]
> tmp[el.aut]=[el.gra+gra,el.dim+dim]
> 
> ```
> 
> end

somma gli elementi :gra e :dim della lista raggruppati per :aut

Es: Se  
@lista = [  
Struct.new(:aut =\> ‘italia’, :gra =\> 1, :dim =\> 10),  
Struct.new(:aut =\> ‘francia’, :gra =\> 1, :dim =\> 20),  
Struct.new(:aut =\> ‘italia’, :gra =\> 1, :dim =\> 10),  
Struct.new(:aut =\> ‘francia’, :gra =\> 1, :dim =\> 15)  
]  
ottieni  
tmp = { # gra, dim  
‘italia’ =\> [2, 20],  
‘francia’ =\> [2, 35]  
}

---

<div class="post-metadata">

**Author:** ![njna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ac8455/32.png) [@njna](https://www.ruby-forum.com/u/njna)\
**Post date:** [June 11, 2008, 8:20pm UTC](https://www.ruby-forum.com/t/hash/140196/3 "2008-06-11T20:20:49Z")

</div>

ti ringrazio per la veloce risposta… la tua spiegazione Ã¨ esauriente!  
ma in parole povere come dovrei leggere queste due righe?

gra=tmp[el.aut][0] //gra Ã¨ uguale a …  
dim=tmp[el.aut][1]

tmp[el.aut]=[el.gra+gra,el.dim+dim]  
questo vuol dire che l’hash tmp ha come chiave [el.aut] e come valori  
[el.gra+gra,el.dim+dim]?

ancora grazie

Claudio Petasecca D. wrote:

> Ciao Njna
> 
> Njna N. wrote:
> 
> > Salve a tutti!
> > 
> > qualcuno sa spiegarmi cosa vuol dire il seguente codice?
> > 
> > tmp=Hash.new(0)
> 
> crea un hash con valore di default 0  
> (cioe’ se accedi con una chiave che non esiste nell’hash, ti ritorna 0)
> 
> > for el in @lista  
> > gra=tmp[el.aut][0]
> 
> anche se tmp e’ vuota, tmp[…] ritorna 0,  
> e 0[…] ritorna 0 (mai saputo!)
> 
> > ```
> > dim=tmp[el.aut][1]
> > tmp[el.aut]=[el.gra+gra,el.dim+dim]
> > 
> > ```
> > 
> > end
> 
> somma gli elementi :gra e :dim della lista raggruppati per :aut
> 
> Es: Se  
> @lista = [  
> Struct.new(:aut =\> ‘italia’, :gra =\> 1, :dim =\> 10),  
> Struct.new(:aut =\> ‘francia’, :gra =\> 1, :dim =\> 20),  
> Struct.new(:aut =\> ‘italia’, :gra =\> 1, :dim =\> 10),  
> Struct.new(:aut =\> ‘francia’, :gra =\> 1, :dim =\> 15)  
> ]  
> ottieni  
> tmp = { # gra, dim  
> ‘italia’ =\> [2, 20],  
> ‘francia’ =\> [2, 35]  
> }

---

<div class="post-metadata">

**Author:** ![njna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ac8455/32.png) [@njna](https://www.ruby-forum.com/u/njna)\
**Post date:** [June 12, 2008, 9:09am UTC](https://www.ruby-forum.com/t/hash/140196/4 "2008-06-12T09:09:01Z")

</div>

> ti ringrazio per la veloce risposta… la tua spiegazione Ã¨ esauriente!  
> ma in parole povere come dovrei leggere queste due righe?
> 
> gra=tmp[el.aut][0] //gra Ã¨ uguale a …  
> dim=tmp[el.aut][1]

Ogni elemento dell’hash ha per chiave el.aut e per elemento un array  
che contiene a sua volta 2 elementi: la somma degli el.gra e la somma  
degli el.dim

gra e’ uguale al valore (temporaneo) della somma degli el.gra, calcolata  
fino a quel momento.  
Lo stesso per dim.

> tmp[el.aut]=[el.gra+gra,el.dim+dim]  
> questo vuol dire che l’hash tmp ha come chiave [el.aut] e come valori  
> [el.gra+gra,el.dim+dim]?
