如何在一个语句中从类对象数组构建哈希

时间:2011-07-14 15:08:39

标签: ruby

我正在使用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值。

我该怎么做?

3 个答案:

答案 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 }