我正在使用Ruby on Rails 3.0.7,我想在一个声明中执行以下操作。
我有一个类对象数组:
# >> 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" => 2,
"10" => 5,
"6" => 9,
"9" => 3,
"..." => ...,
}
其中哈希键为article.id
值,哈希值为article.category_id
值。
我该怎么做?
答案 0 :(得分:5)
>> articles.inject({}) { |k,v| k[v.id] = v.category_id; k }
答案 1 :(得分:3)
Hash[articles.map {|a| [a.id, a.category_id]}]
答案 2 :(得分:1)
在Ruby 1.9中,您可以使用each_with_object
articles.each_with_object({}) { |hash, article| hash[article.id] = article.category_id }