Hash von Arrays in Ruby

Habe ich noch ein Segment, wo der Schlüssel ist ein string, der Wert ist ein array und kein string ist.
Ich möchte so etwas wie dies:

{"k1"=>["v1", "v2"], "k2"=>["v3", "v4"]} 

Habe ich nur einen hash und ein array um dies zu implementieren. Ich habe kodiert, so etwas wie dieses:

hash1 = Hash.new
arr = Array.new
arr.push "v1"
arr.push "v2"
hash1["k1"] = arr 

#hash is like this: {"k1"=>["v1", "v2"]
#Now I clear the array to read the new values

arr. clear
arr.push "v3"
arr.push "v4"
hash1["k2"] = arr
puts hash1

#Output: {"k1"=>["v3", "v4"], "k2"=>["v3", "v4"]}
#Notice that k1's value also got updated

Dann änderte ich eine Zeile:

hash1 = Hash.new
arr = Array.new
arr.push "v1"
arr.push "v2"
hash1["k1"] = arr 

arr = [] # ** This is the only changed line.  Now k1's value is correct. **
arr.push "v3"
arr.push "v4"
hash1["k2"] = arr
puts hash1
#Output: {"k1"=>["v1", "v2"], "k2"=>["v3", "v4"]} (which I wanted)

Kann jemand bitte erklären Sie mir, wie geschieht dies? Ich bin ganz neu in Ruby. Im Idealfall, was ist der richtige Weg, um code für dieses problem?

  • "Ich habe nur einen hash und ein array um dies zu implementieren." Nicht in deinem zweiten Beispiel. Dort haben Sie zwei arrays.
  • { } ist fast immer vorzuziehen Hash.new, und [ ] zu Array.new.
  • warum ist es besser? Ist es nur für die Lesbarkeit? oder gibt es irgendwelche anderen Vorteile?
  • Notation ist kompakter und weniger fehleranfällig. ES macht es auch einfach Elemente hinzufügen später, wo { } wird { foo: 'bar' } anstatt zu wechseln Hash.new zu.
InformationsquelleAutor user2823083 | 2013-09-27
Schreibe einen Kommentar