2011-07-14 12 views
1

私はRuby on Rails 3.0.7を使用していますが、私は1つのステートメントで以下を実行したいと思います。1つのステートメントでクラスオブジェクトの配列からハッシュを構築する方法

私は、クラスオブジェクトの配列を持っている:

# >> articles.inspect 
[ 
    #<Article id: 1, category_id: 2, ...>, 
    #<Article id: 10, category_id: 5, ...>, 
    #<Article id: 6, category_id: 9, ...>, 
    #<Article id: 9, category_id: 3, ...>, 
    #<Article ...> 
] 

私は(1文でを使用してを、つまり、「一つだけのコード行」)を希望このようなハッシュ構築する:

{ 
    "1" => 2, 
    "10" => 5, 
    "6" => 9, 
    "9" => 3, 
    "..." => ..., 
} 

ハッシュキーはarticle.idの値であり、ハッシュ値はarticle.category_idの値です。

どうすればいいですか?

答えて

5
>> articles.inject({}) { |k,v| k[v.id] = v.category_id; k } 
3
Hash[articles.map {|a| [a.id, a.category_id]}] 
1

のRuby 1.9では、あなたは使用することができますeach_with_object

articles.each_with_object({}) { |hash, article| hash[article.id] = article.category_id } 
関連する問題