# Valore di un hash.. mi sono persa

**URL:** <https://www.ruby-forum.com/t/valore-di-un-hash-mi-sono-persa/143891>\
**Category:** IT\
**Created:** [July 23, 2008, 4:08pm UTC](https://www.ruby-forum.com/t/valore-di-un-hash-mi-sono-persa/143891 "2008-07-23T16:08: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:** [July 23, 2008, 4:08pm UTC](https://www.ruby-forum.com/t/valore-di-un-hash-mi-sono-persa/143891/1 "2008-07-23T16:08:29Z")

</div>

ciao a tutti…  
ho questo codice:

def stampa\_partenze(stazione)  
partenze={}  
for el in @nome\_citta  
for i in 0…el[1].length-1  
if el[1][i]==stazione  
partenze[el[0]]=@nome\_orari[el[0]][i]  
end  
end  
end  
end

dove @nome\_citta Ã¨ un hash avete come chiave il nome di un treno e come  
valore un elenco di cittÃ

@nome\_citta[nome\_treno]=lista\_fermate

non riesco assolutamente a capire tutte quelle parentesi quadre di  
stampa\_partenze…

el[1][i]  
cosa vuol dire?  
e anche questo:  
partenze[el[0]]=@nome\_orari[el[0]][i]

potete spiegarmelo in parole povere?  
Grazie mille 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:** [July 24, 2008, 12:03am UTC](https://www.ruby-forum.com/t/valore-di-un-hash-mi-sono-persa/143891/2 "2008-07-24T00:03:57Z")

</div>

Njna N. wrote:

> ciao a tutti…  
> ho questo codice:
> 
> def stampa\_partenze(stazione)  
> partenze={}  
> for el in @nome\_citta  
> for i in 0…el[1].length-1  
> if el[1][i]==stazione  
> partenze[el[0]]=@nome\_orari[el[0]][i]  
> end  
> end  
> end  
> end
> 
> dove @nome\_citta Ã¨ un hash avete come chiave il nome di un treno e come  
> valore un elenco di cittÃ
> 
> @nome\_citta[nome\_treno]=lista\_fermate
> 
> non riesco assolutamente a capire tutte quelle parentesi quadre di  
> stampa\_partenze…
> 
> el[1][i]  
> cosa vuol dire?  
> e anche questo:  
> partenze[el[0]]=@nome\_orari[el[0]][i]
> 
> potete spiegarmelo in parole povere?  
> Grazie mille a tutti!

Per gestire gli hash ti conviene usare each:

hash.each do |chiave, valore|  
…  
end

Per gli array puoi sempre fare lo stesso:

array.each do |valore|  
…  
end

In questo modo dovrebbe essere tutto piÃ¹ semplice. Con il for nella  
variabile hai un array contenente chiave e valore ([chiave,valore]), piÃ¹  
scomodo da decifrare.

Tradotto in linguaggio piÃ¹ semplice, dunque:  
def stampa\_partenze(stazione)  
partenze={}  
@nome\_citta.each do |nome, elenco|  
for i in 0…elenco.length-1  
if elenco[i]==stazione  
partenze[nome]=@nome\_orari[nome][i]  
end  
end  
end  
end

Inoltre ti consiglierei un “return partenze” alla fine del metodo, sennÃ²  
non avrebbe utilitÃ .

---

<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:** [July 24, 2008, 9:16am UTC](https://www.ruby-forum.com/t/valore-di-un-hash-mi-sono-persa/143891/3 "2008-07-24T09:16:25Z")

</div>

Grazie ma non ho ancora capito il significato della quadre…

cosa vuol dire questo?  
partenze[nome]=@nome\_orari[nome][i]

Ancora grazie!

Simone Scalabrino wrote:

> Per gestire gli hash ti conviene usare each:
> 
> hash.each do |chiave, valore|  
> …  
> end
> 
> Per gli array puoi sempre fare lo stesso:
> 
> array.each do |valore|  
> …  
> end
> 
> In questo modo dovrebbe essere tutto piÃ¹ semplice. Con il for nella  
> variabile hai un array contenente chiave e valore ([chiave,valore]), piÃ¹  
> scomodo da decifrare.
> 
> Tradotto in linguaggio piÃ¹ semplice, dunque:  
> def stampa\_partenze(stazione)  
> partenze={}  
> @nome\_citta.each do |nome, elenco|  
> for i in 0…elenco.length-1  
> if elenco[i]==stazione  
> partenze[nome]=@nome\_orari[nome][i]  
> end  
> end  
> end  
> end
> 
> Inoltre ti consiglierei un “return partenze” alla fine del metodo, sennÃ²  
> non avrebbe utilitÃ .

---

<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:** [July 24, 2008, 10:36am UTC](https://www.ruby-forum.com/t/valore-di-un-hash-mi-sono-persa/143891/4 "2008-07-24T10:36:10Z")

</div>

Njna N. wrote:

> Grazie ma non ho ancora capito il significato della quadre…
> 
> cosa vuol dire questo?  
> partenze[nome]=@nome\_orari[nome][i]
> 
> Ancora grazie!
> 
> Simone Scalabrino wrote:
> 
> > Per gestire gli hash ti conviene usare each:
> > 
> > hash.each do |chiave, valore|  
> > …  
> > end
> > 
> > Per gli array puoi sempre fare lo stesso:
> > 
> > array.each do |valore|  
> > …  
> > end
> > 
> > In questo modo dovrebbe essere tutto piÃ¹ semplice. Con il for nella  
> > variabile hai un array contenente chiave e valore ([chiave,valore]), piÃ¹  
> > scomodo da decifrare.
> > 
> > Tradotto in linguaggio piÃ¹ semplice, dunque:  
> > def stampa\_partenze(stazione)  
> > partenze={}  
> > @nome\_citta.each do |nome, elenco|  
> > for i in 0…elenco.length-1  
> > if elenco[i]==stazione  
> > partenze[nome]=@nome\_orari[nome][i]  
> > end  
> > end  
> > end  
> > end
> > 
> > Inoltre ti consiglierei un “return partenze” alla fine del metodo, sennÃ²  
> > non avrebbe utilitÃ .

Le quadre servono a richiamare un determinato elemento di un array o un  
hash. Ad esempio, in un hash fatto cosÃ¬:  
“a”=\>“ciao”  
“b”=\>“prova”  
“c”=\>“ruby”

se scrivi hash[“a”] avrai come risultato “ciao” etc. Idem per gli array:  
0=\>“prova”  
1=\>“vero”  
2=\>“falso”  
con array[1] avrai “vero”.

Per quanto riguarda “@nome\_orari”, dev’essere una matrice, formata in  
questo modo:

0=\>[]  
1=\>[]  
2=\>[]

Array di array praticamente. Richiamando l’elemento 0, non otterremo un  
numero o una stringa, ma un ulteriore array, da cui possiamo prendere  
l’elemento usando ancora le quadre. Ad esempio:

0=\>[“uno”,“due”,“tre”]  
1=\>[“quattro”,“cinque”,“sei”]  
2=\>[“sette”,“otto”,“nove”]

usando array[1] otterremo [“quattro”,“cinque”,“sei”]. Se a noi serve  
“cinque”, possiamo prendere l’elemento “1” (ricorda, gli array partono  
da 0), quindi faremo:  
array[1][1]
