[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