web-dev-qa-db-de.com

Ruby Hash zu Array von Werten

Ich habe das:

hash  = { "a"=>["a", "b", "c"], "b"=>["b", "c"] } 

und ich möchte dazu kommen: [["a","b","c"],["b","c"]]

Das scheint so, als ob es funktionieren sollte, aber es funktioniert nicht:

hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]} 

Irgendwelche Vorschläge?

109
tbrooke

Auch ein bisschen einfacher ....

>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]

Ruby doc hier

240
Ray Toal

Ich würde ... benutzen:

hash.map { |key, value| value }
39
Michael Durrant
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 

Enumerable#collect nimmt einen Block und gibt ein Array der Ergebnisse der einmaligen Ausführung des Blocks für jedes Element der Aufzählung zurück. Dieser Code ignoriert also nur die Schlüssel und gibt ein Array aller Werte zurück.

Das Enumerable Modul ist ziemlich genial. Wenn Sie es gut kennen, können Sie viel Zeit und Code sparen.

21
jergason
hash  = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
7
mrded

Es ist so einfach wie

hash.values
#=> [["a", "b", "c"], ["b", "c"]]

dies gibt ein neues Array zurück, das mit den Werten von Hash gefüllt ist

wenn Sie dieses neue Array speichern möchten, tun Sie dies

array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]

array_of_values
 #=> [["a", "b", "c"], ["b", "c"]]
4
Melissa Jimison

Es gibt auch diesen:

hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]

Warum es funktioniert:

Das & Anrufe to_proc auf dem Objekt und übergibt es als Block an die Methode.

something {|i| i.foo }
something(&:foo)
2
karlingen