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 sumFonctionnement 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
endreduce 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 maxConstruire 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 wordQu’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.inspectConstruire 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 lengthsCompter 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 tallyreduce 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 }.inspectLe raccourci tally
Pour compter, Ruby possède la méthode intégrée tally qui s’en charge pour vous.
puts ["a", "b", "a"].tallyVérification rapide
Vérifiez vos compétences en agrégation.
Récapitulatif
Vous pouvez maintenant agréger des collections :
reduce/injectavec un accumulateur, une valeur de départ ou un symboleeach_with_objectpour construire des tableaux et des hachagestallypour 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
- Créer des plages
- Le module Enumerable
- map, select, reject
- reduce et each_with_object