Hash

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!

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

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

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]?