web-dev-qa-db-ja.com

Ruby値の配列へのハッシュ

私はこれを持っています:

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

そして、私はこれに到達したい:[["a","b","c"],["b","c"]]

これは動作するはずですが、動作しません:

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

助言がありますか?

106
tbrooke

また、少しシンプルに....

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

Ruby doc here

236
Ray Toal

私は使うだろう:

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

Enumerable#collect はブロックを受け取り、enumerableのすべての要素でブロックを1回実行した結果の配列を返します。したがって、このコードはキーを無視し、すべての値の配列を返します。

Enumerableモジュールはとても素晴らしいです。それをよく知ることで、多くの時間と多くのコードを節約できます。

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

それは次のように簡単です

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

これにより、ハッシュからの値が入力された新しい配列が返されます

新しい配列を保存したい場合は

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

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

これもあります:

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

なぜ機能するのか:

&はオブジェクトでto_procを呼び出し、ブロックとしてメソッドに渡します。

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