# Hash e inserimento di dati

**URL:** <https://www.ruby-forum.com/t/hash-e-inserimento-di-dati/140792>\
**Category:** IT\
**Created:** [June 18, 2008, 4:42pm UTC](https://www.ruby-forum.com/t/hash-e-inserimento-di-dati/140792 "2008-06-18T16:42:58Z")\
**Posts on this page:** 5\
**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 18, 2008, 4:42pm UTC](https://www.ruby-forum.com/t/hash-e-inserimento-di-dati/140792/1 "2008-06-18T16:42:58Z")

</div>

Ciao a tutti.  
ho un insieme hash che uso per attribuire ad un esame dei prerequisiti.  
del tipo:

prog2 =\>prog1

in questo caso prog1 Ã¨ un prerequistio di prog2.

l’inserimento di questi valore nell’hash avviene in questo modo:  
PianoDiStudi.aggiungi\_prerequisito(“prog2”,[“prog1”])

ovviamente ci possono essere altri inserimenti per quanto riguarda prog2  
(anche diversi insieme del tipo  
PianoDiStudi.aggiungi\_prerequisito(“prog2”,[“algebra”,“analisi”]))  
quindi Ã¨ necessario che con gli inserimenti successivi prog1 nn venga  
cancellato ma se giÃ presente nn venga riscritto…

mi date una mano che mi sono persa?

grazie mille

---

<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 18, 2008, 4:57pm UTC](https://www.ruby-forum.com/t/hash-e-inserimento-di-dati/140792/2 "2008-06-18T16:57:51Z")

</div>

Se ho capito bene:

@hash = {}

def aggiungi\_prerequisito(key, values)  
@hash[key] = ((@hash[key] || []) + values).uniq  
end

aggiungi\_prerequisito(“prog2”,[“prog1”])  
aggiungi\_prerequisito(“prog2”,[“algebra”,“analisi”])  
puts @hash.inspect

# =\> {“prog2”=\>[“prog1”, “algebra”, “analisi”]}

aggiungi\_prerequisito(“prog2”,[“algebra”])  
puts @hash.inspect

# =\> {“prog2”=\>[“prog1”, “algebra”, “analisi”]}

---

<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 18, 2008, 5:12pm UTC](https://www.ruby-forum.com/t/hash-e-inserimento-di-dati/140792/3 "2008-06-18T17:12:43Z")

</div>

Si, ciÃ² che voglio Ã¨ proprio quello, ma ho provato ad usare la tua  
soluzione ma non va… nel mio caso aggiungi\_prerequisito Ã¨ un metodo di  
classe e anche @hash Ã¨ un @@hash… detto questo cambia in qlc modo il  
codice?

grazie

Claudio Petasecca D. wrote:

> Se ho capito bene:
> 
> @hash = {}
> 
> def aggiungi\_prerequisito(key, values)  
> @hash[key] = ((@hash[key] || []) + values).uniq  
> end
> 
> aggiungi\_prerequisito(“prog2”,[“prog1”])  
> aggiungi\_prerequisito(“prog2”,[“algebra”,“analisi”])  
> puts @hash.inspect
> 
> # =\> {“prog2”=\>[“prog1”, “algebra”, “analisi”]}
> 
> aggiungi\_prerequisito(“prog2”,[“algebra”])  
> puts @hash.inspect
> 
> # =\> {“prog2”=\>[“prog1”, “algebra”, “analisi”]}

---

<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 18, 2008, 5:15pm UTC](https://www.ruby-forum.com/t/hash-e-inserimento-di-dati/140792/4 "2008-06-18T17:15:33Z")

</div>

rettifica: funziona!  
mi spieghi perÃ² quelle righe sante che hai scritto??? 😃

---

<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 18, 2008, 5:26pm UTC](https://www.ruby-forum.com/t/hash-e-inserimento-di-dati/140792/5 "2008-06-18T17:26:04Z")

</div>

Njna N. wrote:

> rettifica: funziona!  
> mi spieghi perÃ² quelle righe sante che hai scritto??? 😃

Immagino che ti riferisci a:

@hash[key] = ((@hash[key] || []) + values).uniq

@hash[key] || []  
se la chiave key non e’ mai stata inserita, @hash[key] e’ nil.  
cosi’ ottieni comunque un array vuoto

(…) + values  
e’ la unione di due array (con possibili duplicati)

(…).uniq  
e’ la rimozione di duplicati dell’array
