[ruby-it] Array multidimensionale
Andrea Longhi
andrea74 a mailshack.com
Dom 17 Maggio 2009 14:14:34 CEST
> in effetti mi sa che hai ragione anche se non capisco fino in fondo...
Non so se sia utile a chiarire i tuoi ultimi dubbi, ma quando scrivo
v=[]
v.fill(Array.new, 0..2)
sto riempiendo v con degli elementi che puntano tutti allo stesso array.
Quando modifico un elemento qualisasi di v vengono modificati di
conseguenza anche tutti gli altri.
Posso verificare l'esattezza di quanto dico controllando l'object_id
degli elementi:
v.each{|e| puts e.object_id}
che risulteranno tutti uguali (puntano quindi tutti allo stesso oggetto)
Se poi scrivo
v.map{|arr| arr.fill(0, 0..2)}
sto facendo un lavoro inutile in quanto la ricorsione modifica sempre lo
stesso oggetto.
Basterebbe un semplice
v[0].fill(0, 0..2)
per modificare tutti gli elementi dell'array, senza scomodare la
ricorsione.
A questo punto dovrebbe essere chiaro che scrivere
v[1][1] = 'xxx'
modificherà non solo v[1][1], ma anche v[0][1] e v[2][1] poiche' v[0],
v[1], v[2] sono lo stesso oggetto.
Per ottenere quello che avevi in mente tu invece avrei dovuto
inizializzare v così:
v= Array.new(3){[]}
v.map ...
...
infatti ora
v.each{|e| puts e.object_id}
restituisce valori diversi, quindi ogni elemento punta ad un array
diverso.
--
Posted via http://www.ruby-forum.com/.
More information about the Ml
mailing list