1
votes

Comment parcourir un tableau d'objets dans Ruby

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.


0 commentaires

5 Réponses :


1
votes

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


0 commentaires

1
votes

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ément Array#map ):

customers.map { _1[:id] }
#=> [1, 2, 3, 4, 5, 6]

1 commentaires

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).)



1
votes

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.)


0 commentaires

0
votes

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]]


0 commentaires

3
votes

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}
]


0 commentaires