[ruby-it] Hash con due elementi come chiave

Pierpaolo Sanna pierpaolo.sanna a gmail.com
Ven 5 Dic 2008 21:30:42 CET


Prima ho espresso un pò male il concetto. Con

Hash.new(obj)

viene ustao lo stesso oggetto (obj) per tutti i valori di default. Invece
con

Hash.new {|h,k| ....}

ogni volta che richiedi il valore di una chiave non ancora presente
nell'hash viene chiamato il blocco, che dovrebbe restituire il valore di
default, ma in questo caso è un oggetto differente di volta in volta.
io utilizzo questa forma

h = Hash.new {|h,k| h[k] = []}

perchè così non devo preoccuparmi di fare i controlli sulla chiave prima di
appendere un elemento nell'array , cioè posso semplicamente fare così

h["nouva chiave"]  << "elemento da appendere"

in questo modo se la chiave è già presente, il nuovo elemento viene accodato
all'array, se la chiave non è presente viene creato un nuovo array e poi
inserito l'elemento
altrimenti dovrei fare così

if h.has_key?("nouva chiave")
  h << "elemento da appendere"
else
 h["nuova chiave] = []
 h["nuova chiave] << "elemento da appendere"
end






2008/12/5 Njna Njna <v_orecchia a hotmail.com>

> ok ma quando basta mettere Hash{} e quando invece è necessario
> specificare tra parentesi una cosa del genere? {|h,k| h[k] = []}
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml a lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>


More information about the Ml mailing list