0Pricing
Ruby Academy · Leçon

reduce et each_with_object

Agrégerez des collections

reduce et each_with_object est une leçon Ruby Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ruby Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ruby Academy comprend 4 leçons au total.

Qu’est-ce que reduce ?

reduce (alias inject) combine tous les éléments en une seule valeur. Le bloc reçoit un accumulateur et l’élément actuel.

sum = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts sum

Fonctionnement de l’accumulateur

L’accumulateur transporte le résultat en cours d’une itération à l’autre. La valeur renvoyée par le bloc devient l’accumulateur suivant.

[1, 2, 3].reduce(0) do |acc, n|
  puts "acc=#{acc} n=#{n}"
  acc + n
end

reduce sans valeur de départ

Sans valeur initiale, le premier élément devient l’accumulateur et l’itération commence avec le deuxième.

puts [10, 20, 30].reduce { |acc, n| acc + n }

reduce avec un symbole

Pour les opérateurs simples, transmettez un symbole comme :+ ou :* au lieu d’un bloc.

puts [1, 2, 3, 4].reduce(:+)
puts [1, 2, 3, 4].reduce(:*)

Trouver un maximum

reduce peut calculer bien plus que des sommes, par exemple la valeur la plus grande.

nums = [3, 9, 2, 7]
max = nums.reduce { |acc, n| n > acc ? n : acc }
puts max

Construire une chaîne

L’accumulateur peut être de n’importe quel type, notamment une chaîne que vous construisez progressivement.

letters = ["r", "u", "b", "y"]
word = letters.reduce("") { |acc, c| acc + c.upcase }
puts word

Qu’est-ce que each_with_object ?

each_with_object ressemble à reduce, mais vous lui fournissez un objet modifiable qui est renvoyé automatiquement. Vous modifiez l’objet dans le bloc.

result = [1, 2, 3].each_with_object([]) do |n, arr|
  arr << n * 2
end
puts result.inspect

Construire un hachage

each_with_object est idéal pour construire des hachages, car vous n’avez pas besoin de renvoyer l’objet à chaque fois.

words = ["apple", "pear"]
lengths = words.each_with_object({}) do |w, h|
  h[w] = w.length
end
puts lengths

Compter les occurrences

Combinez un hachage par défaut avec each_with_object pour comptabiliser les éléments.

votes = ["a", "b", "a", "a"]
tally = votes.each_with_object(Hash.new(0)) do |v, h|
  h[v] += 1
end
puts tally

reduce contre each_with_object

Utilisez reduce lorsque chaque étape renvoie une nouvelle valeur (sommes, produits). Utilisez each_with_object lorsque vous modifiez un même conteneur (tableaux, hachages).

puts [1, 2, 3].reduce(:+)
puts [1, 2, 3].each_with_object([]) { |n, a| a << n }.inspect

Le raccourci tally

Pour compter, Ruby possède la méthode intégrée tally qui s’en charge pour vous.

puts ["a", "b", "a"].tally

Vérification rapide

Vérifiez vos compétences en agrégation.

Récapitulatif

Vous pouvez maintenant agréger des collections :

  • reduce/inject avec un accumulateur, une valeur de départ ou un symbole
  • each_with_object pour construire des tableaux et des hachages
  • tally pour compter rapidement
  • choisir reduce pour les nouvelles valeurs et each_with_object pour les conteneurs modifiables

Prochain cours : les nombres et les mathématiques.

puts (1..5).reduce(:*)

Questions Fréquemment Posées

La leçon « reduce et each_with_object » est-elle gratuite ?

Oui — le texte complet de « reduce et each_with_object » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ruby Academy, passe à CoddyKit PRO. Le cours Ruby Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « reduce et each_with_object » ?

Agrégerez des collections Tu pratiques Ruby Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Ruby Academy ?

Aucune expérience préalable n'est requise. Ruby Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « reduce et each_with_object » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Ruby Academy ?

Oui. Chaque leçon Ruby Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Créer des plages
  2. Le module Enumerable
  3. map, select, reject
  4. reduce et each_with_object
← Retour à Ruby Academy