Hash e inserimento di dati

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

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”]}

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”]}

rettifica: funziona!
mi spieghi però quelle righe sante che hai scritto??? :smiley:

Njna N. wrote:

rettifica: funziona!
mi spieghi però quelle righe sante che hai scritto??? :smiley:

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