es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo iterar sobre un array de hashes en Ruby y devolver todos los valores de una clave específica en una cadena.

Actualmente estoy tratando de iterar sobre una matriz de hashes y devolver todos los valores de la clave “name” en una cadena. Aquí está la matriz:

foods =
  [
    { name: 'Dan Dan Noodles', cuisine: 'Sichuan', heat_level: 8 },
    { name: 'Nashville Hot Chicken', cuisine: 'American', heat_level: 7 },
    { name: 'Panang Curry', cuisine: 'Thai', heat_level: 4 },
  ]

Esto es lo que estoy haciendo actualmente y no estoy completamente seguro de por qué no funciona:

foods.each do |food|
  food.each do |k, v|
    if food == :name
      "#{v}"
    end
  end
end

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para devolver todos los valores de la clave “name” en una cadena, puedes usar el método map para iterar sobre cada hash en el array y devolver el valor de la clave “name”. Aquí tienes un ejemplo:

    names = foods.map { |food| food[:name] }.join(", ")
    puts names
    

    Este código imprimirá la siguiente cadena:

    Dan Dan Noodles, Nashville Hot Chicken, Panang Curry
    

    En tu código, el bucle interno no es necesario ya que la variable food representa un único hash. Además, estás comparando el hash food con el símbolo :name en lugar de comprobar si la clave k es igual a :name. Para corregir tu código, puedes hacer lo siguiente:

    names = []
    foods.each do |food|
      food.each do |k, v|
        if k == :name
          names.push(v)
        end
      end
    end
    puts names.join(", ")
    

    Esto imprimirá la misma cadena que el ejemplo anterior. Sin embargo, usar map es una forma más concisa de lograr el mismo resultado.

Comments are closed.