J'ai ce tableau ici et j'ai besoin d'obtenir le "id" de chaque objet
@scores.each_with_index{ |score, index| }
Je sais comment parcourir tout le tableau avec
[{ id: 1, points: 60 }, { id: 2, points: 20 }, { id: 3, points: 95 }, { id: 4, points: 75 }] customers = [{ id: 1, points: 90 }, { id: 2, points: 20 }, { id: 3, points: 70 }, { id: 4, points: 40 }, { id: 5, points: 60 }, { id: 6, points: 10}]
Cependant, je n'ai pas trouvé de moyen d'obtenir les points des objets.
5 Réponses :
Ce que vous avez appelé score
est en fait un hachage comme { id: 1, points: 60 }
et je vais l'appeler item
Alors essayons
@scores.each_with_index do |item, index| puts "#{index + 1}: id #{item[:id]}, points #{item[:points]}" end
Donc, j'ai ce tableau ici et j'ai besoin d'obtenir l'identifiant de chaque objet
Afin de transformer chaque élément d'une collection, vous pouvez utiliser
Enumerable#map
(ou dans ce cas plus précisémentArray#map
):customers.map { _1[:id] } #=> [1, 2, 3, 4, 5, 6]
Jörg a négligé de mentionner que les paramètres de bloc numérotés ont été introduits dans Ruby v2.7. Je suppose que la beauté est dans les yeux du spectateur, mais pour moi, cela semble avoir été fouetté avec un vilain bâton. (Crédit à Bo Diddley (à 2:51).)
Cette construction donnée est un tableau d'objets, nous devons donc parcourir individuellement chaque élément et imprimer la valeur présente dans les objets. Le code suivant montre comment nous pouvons le faire:
customers.each{|obj| p obj[:id].to_s+" "+ obj[:points].to_s }
Ici, nous parcourons chaque élément et imprimons les entités individuelles du hachage en utilisant obj[:id]
/ obj[:points]
( obj
étant chaque objet individuel ici.)
Et quelque chose comme ça?
customers.map(&:to_proc).map{ |p| [:id, :points].map(&p) } => [[1, 90], [2, 20], [3, 70], [4, 40], [5, 60], [6, 10]]
Vous recherchez peut-être ce qui suit.
h.keys #=> [1, 2, 3, 4, 5, 6] h.values #=> [90, 20, 70, 40, 60, 10] h[2] #=> 20 h.key?(5) #=> true h.key?(7) #=> false h.value?(70) #=> true h.value?(30) #=> false
h = customers.each_with_object({}) do |g,h| id, points = g.values_at(:id, :points) h[id] = points end #=> {1=>90, 2=>20, 3=>70, 4=>40, 5=>60, 6=>10}
Cela vous permet d'extraire facilement des informations d'intérêt, telles que les suivantes.
customers = [ { id: 1, points: 90 }, { id: 2, points: 20 }, { id: 3, points: 70 }, { id: 4, points: 40 }, { id: 5, points: 60 }, { id: 6, points: 10} ]