2016-08-29 3 views
0

Wenn ich habe:Warum wird mein Array-Wert in meiner Map nicht aktualisiert?

map = Hash.new { [] } 

Es zeigt, dass map [ 'a'] (oder jede andere beliebige Taste) auf [] initialisiert wird, wie ich erwartet hatte. Aber wenn ich versuche, es zu aktualisieren mit:

Dann ändert sich meine Karte überhaupt nicht. Soll es? Mache ich etwas falsch? Wird dies nicht unterstützt, wenn der eigentliche Schlüssel nicht existiert, obwohl er einen Standardwert haben soll?

+3

schlechte Idee, Ihre Hash 'map' zu nennen. –

+0

Ja, das hat mich ernsthaft gestolpert: P –

Antwort

1

So verwenden Sie einen Block nicht, um einen Hash zu initialisieren. Der Block empfängt den neuen Hash und den Schlüssel, auf den zugegriffen wird, und lässt Sie den zugehörigen Wert definieren.

Sie benötigen die folgenden:

map = Hash.new { |hash,key| hash[key] = [] } 
1

können Sie einen Block verwenden, um den Hash-{|h,k| h[k] = [] }

intiialize Oder Sie können map['a'] = 15 dies tun wird Karte ermöglichen einen Hash mit a sein zu zeigen 15

Verwandte Themen