2012-05-08 16 views
1
 
h = {1=>[1,2,3], 2=>[4,5,6]} 
new_arr = [] 
h.each_value {|arr| 
    new_arr.concat(arr) 
} 

これはうまくいくが、ルビーのようなやり方は何ですか?ルビーの配列のハッシュを集める

すべての値は配列ですが、各配列の要素は変更しないでください。

h.values.reduce(&:+) 

答えて

10

どのようにこのについてです:

+0

確かに最も簡単な解決策です。 – d11wtq

+0

あなたがするべきではないものを平らにするかもしれないと心配しているならば、 'h.values.flatten(1)'を使うことができます。 –

4

あなたは減らす使用することができますか?

h.values.flatten 
+0

。 &とは何ですか? – MxyL

+1

Enumerableは、ほとんどすべての列挙可能なデータ構造(ハッシュ、配列、セットなど)がルビーで混在するモジュールです。 Ruby言語の他のほとんどの部分よりも勉強してください;)http://ruby-doc.org/core-1.9.3/Enumerable.html '&:+'構文は '&'(proc)です。実際にブロックを渡すのではなく、メソッドの呼び出しを指定する方法であるSymbol ':+'が続きます。この場合、 'values'配列の各要素に対して' + 'が呼び出されます。 – d11wtq

+0

oh、ok。はい、私は列挙可能なクラスがたくさん現れるのを見ました。 – MxyL

0

ハッシュ値の配列を取得する場合は、ハッシュ値を使用します。

new_arr = h.values 
1

少し不可解

h.flat_map(&:last) 

少し冗長な私は減らす方法が定義されている場所を見つけることができないよう

h.flat_map{|_, value| value} 
関連する問題