Forum: Italian Ruby user group Hash e array.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-19 11:18
(Received via mailing list)
Salve a tutti!
Ho un problema con gli array e gli hash

Ho un hash bidimensionale di array fatto in questo modo (in cui gli
array
sono tutti uguali tra loro per ogni indice)

hsh[x][y]
=> [a,b,c,d]
hsh[m][n]
=> [a,b,c,d]
hsh[a][b]
=> [a,b,c,d]


Quello che voglio fare è cancellare un elemento dall'array per un
determinato indice. Uso il metodo delete:

hsh[x][y].delete(a)

Quello che vorrei ottenere è

hsh[x][y]
=> [b,c,d]
hsh[m][n]
=> [a,b,c,d]
hsh[a][b]
=> [a,b,c,d]

Quello che invece ottengo
è:
hsh[x][y]
=> [b,c,d]
hsh[m][n]
=> [b,c,d]
hsh[a][b]
=> [b,c,d]

Sapete dirmi perché vengono cancellati anche dagli altri elementi?
Dimenticavo, l'hash è stato definito
così:
hash_builder = proc { |h,k| h[k] = Hash.new(&hash_builder) }
hsh = Hash.new(&hash_builder)

Grazie a tutti.
Silvia
Aea9ee14e387a68f5cd63048a0ba9266?d=identicon&s=25 David (Guest)
on 2007-07-19 13:24
(Received via mailing list)
Così a caldo mi sembra che in realtà gli array ai quali le chiavi del tuo
hash puntano sono in realtà lo stesso oggetto.
Fai questa verifica:
hsh[x][y].id   # => un numerone
hsh[m][n].id # => altro numerone (?)

Se gli id sono gli stessi sai dove sta il problema: hai assegnato lo
stesso oggetto e vorrai fare un Array#dup quando li assegni.
0c7048451c5f5350c6e6332ffdc7cffe?d=identicon&s=25 Lucea (Guest)
on 2007-07-19 13:37
(Received via mailing list)
Era proprio quello il problema! Grazie mille per l'aiuto!
Silvia
Aea9ee14e387a68f5cd63048a0ba9266?d=identicon&s=25 David (Guest)
on 2007-07-19 13:40
(Received via mailing list)
On Thu, 19 Jul 2007 13:35:50 +0200, Lucea wrote:
> Era proprio quello il problema! Grazie mille per l'aiuto!
> Silvia

:-)
This topic is locked and can not be replied to.