我有一个对象数组:
[
#<User id: 1, name: "Kostas">,
#<User id: 2, name: "Moufa">,
...
]
我希望将其转换为Hash,其中id
为键,对象为值。现在我这样做,但我知道有更好的方法:
users = User.all.reduce({}) do |hash, user|
hash[user.id] = user
hash
end
预期产出:
{
1 => #<User id: 1, name: "Kostas">,
2 => #<User id: 2, name: "Moufa">,
...
}
答案 0 :(得分:53)
users_by_id = User.all.map { |user| [user.id, user] }.to_h
如果您使用的是Rails,则ActiveSupport会提供Enumerable#index_by:
users_by_id = User.all.index_by(&:id)
答案 1 :(得分:4)
使用each_with_object
代替reduce
,您可以获得更好的代码。
users = User.all.each_with_object({}) do |user, hash|
hash[user.id] = user
end