Convierta una matriz de hashes en un hash de hashes, indexados por un atributo de los hashes

Tengo una matriz de hashes que representan objetos como respuesta a una llamada API. Necesito extraer datos de algunos de los hash, y una clave en particular sirve como id para el objeto hash. Me gustaría convertir la matriz en un hash con las claves como los identificadores y los valores como el hash original con esa identificación.

Esto es de lo que estoy hablando:

api_response = [
  { :id => 1, :foo => 'bar' },
  { :id => 2, :foo => 'another bar' },
  # ..
]

ideal_response = {
  1 => { :id => 1, :foo => 'bar' },
  2 => { :id => 2, :foo => 'another bar' },
  # ..
}

Hay dos maneras en que podría pensar en hacer esto.

Asigne los datos a laideal_response (abajo)Utilizarapi_response.find { |x| x[:id] == i } para cada registro que necesito acceder.Un método que desconozco, que posiblemente implique una forma de usarmap para construir un hash, de forma nativa.

Mi método de mapeo:

keys = data.map { |x| x[:id] }
mapped = Hash[*keys.zip(data).flatten]

No puedo evitar sentir que hay una forma más eficiente y ordenada de hacer esto. La opción 2 es muy eficaz cuando hay un número mínimo de registros a los que se debe acceder. La asignación sobresale aquí, pero comienza a descomponerse cuando hay muchos registros en la respuesta. Afortunadamente, no espero que haya más de 50-100 registros, por lo que el mapeo es suficiente.

¿Hay una manera más inteligente, ordenada o más eficiente de hacer esto en Ruby?

Respuestas a la pregunta(3)

Su respuesta a la pregunta