Menu
Coddy logo textTech

Reduce / Inject

Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 23 sur 56.

Parfois, vous avez besoin de réduire un tableau entier à une seule valeur, une somme, un produit, une chaîne la plus longue. reduce (également appelé inject : même méthode, deux noms) est l'outil.

Le bloc prend deux paramètres : l'accumulateur et l'élément actuel. La valeur de retour du bloc devient l'accumulateur suivant.

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

Étape par étape, l'accumulateur est 0 → 1 → 3 → 6 → 10.

Le premier argument est la valeur de départ de l'accumulateur. Si vous l'omettez, Ruby utilise le premier élément du tableau :

[1, 2, 3, 4].reduce { |acc, n| acc * n }   # 24

Pour les opérations pures comme la somme et le produit, Ruby vous offre un raccourci, passez un symbole au lieu d'un bloc :

[1, 2, 3, 4].reduce(:+)   # 10
[1, 2, 3, 4].reduce(:*)   # 24

Une fois que vous savez construire un accumulateur personnalisé, vous pouvez calculer presque n'importe quoi en une seule passe.

challenge icon

Défi

Facile

Lisez une liste d'entiers séparés par des virgules. Affichez trois lignes :

  1. La somme (utilisez reduce(:+))
  2. Le produit (utilisez reduce(:*))
  3. Le maximum, calculé avec reduce et un bloc explicite, et non en utilisant max.

Pour l'entrée 2,5,3,8, la sortie est :

18
240
8

Aide-mémoire

reduce (alias : inject) réduit un tableau à une seule valeur. Le bloc reçoit un accumulateur et l'élément actuel ; sa valeur de retour devient l'accumulateur suivant.

total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }  # 10

Omettez la valeur de départ pour utiliser le premier élément comme accumulateur initial :

[1, 2, 3, 4].reduce { |acc, n| acc * n }  # 24

Passez un symbole comme raccourci pour des opérations simples :

[1, 2, 3, 4].reduce(:+)  # 10
[1, 2, 3, 4].reduce(:*)  # 24

Essayez vous-même

numbers = gets.chomp.split(",").map(&:to_i)

# À FAIRE : afficher la somme, le produit et le maximum (avec reduce + bloc explicite)
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux