У меня есть массив хэшей, представляющих объекты, в ответ на вызов API. Мне нужно извлечь данные из некоторых хэшей, и один конкретный ключ служит идентификатором для хеш-объекта. Я хотел бы преобразовать массив в хеш с ключами в качестве идентификаторов и значениями в качестве исходного хеша с этим идентификатором.
Вот о чем я говорю:
api_response = [
{ :id => 1, :foo => 'bar' },
{ :id => 2, :foo => 'another bar' },
# ..
]
ideal_response = {
1 => { :id => 1, :foo => 'bar' },
2 => { :id => 2, :foo => 'another bar' },
# ..
}
Я могу придумать два способа выполняя это.
ideal_response
(ниже) api_response.find {| x | x [: id] == i}
для каждой записи, к которой мне нужно получить доступ. map
для создания хэша изначально . Мой метод отображения:
keys = data.map { |x| x[:id] }
mapped = Hash[*keys.zip(data).flatten]
Я не могу не чувствовать, что есть более производительный и аккуратный способ сделать это. Вариант 2 очень эффективен при минимальном количестве записей, к которым необходимо получить доступ. Сопоставление здесь превосходно, но оно начинает ломаться, когда в ответе много записей. К счастью, я не Не ожидаю, что будет более 50-100 записей, поэтому сопоставления достаточно.
Есть ли более умный, аккуратный или более производительный способ сделать это в Ruby?