Ответ 1
users_by_id = User.all.map { |u| [u.id, u] }.to_h
Вопрос не помечен rails, но ваш код выглядит так. Проверить ActiveSupport Перечислить # index_by:
users_by_id = User.all.index_by(&:id)
У меня есть массив объектов:
[
#<User id: 1, name: "Kostas">,
#<User id: 2, name: "Moufa">,
...
]
И я хочу преобразовать это в хэш с 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">,
...
}
users_by_id = User.all.map { |u| [u.id, u] }.to_h
Вопрос не помечен rails, но ваш код выглядит так. Проверить ActiveSupport Перечислить # index_by:
users_by_id = User.all.index_by(&:id)
Вы получите немного лучший код, используя each_with_object
вместо reduce
.
users = User.all.each_with_object({}) do |user, hash|
hash[user.id] = user
end