Hash e array


#1

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


#2

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.


#3

On Thu, 19 Jul 2007 13:35:50 +0200, Lucea wrote:

Era proprio quello il problema! Grazie mille per l’aiuto!
Silvia

:slight_smile:


#4

Era proprio quello il problema! Grazie mille per l’aiuto!
Silvia