Chaînage de Map
Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 22 sur 56.
Tu as découvert map dans les fondamentaux : il construit un nouveau tableau en transformant chaque élément. Sa véritable puissance se révèle lorsque tu l’enchaînes avec select, reject et d’autres méthodes similaires.
Chaque méthode renvoie un tableau. Appeler une autre méthode sur le résultat permet donc de continuer :
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Lisez la chaîne de haut en bas : commencez par les nombres, gardez ceux qui sont impairs, multipliez chacun par 10. Aucune variable temporaire, aucune boucle.
Le raccourci &:method_name fonctionne lorsque le bloc appelle simplement une méthode :
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (identique)Cette forme abrégée est partout dans le code Ruby. Reconnais-la quand tu la vois.
Défi
FacileLisez une liste de mots séparés par des virgules. Affichez sur une seule ligne les mots de plus de 3 caractères, en majuscules, reliés par , .
Construisez-la comme une seule chaîne : select les mots longs, appliquez map avec &:upcase, puis join.
Pour l’entrée hi,hello,yo,coddy,sup, la sortie est :
HELLO, CODDYEssayez vous-même
words = gets.chomp.split(",")
# TODO: enchaîner select + map(&:upcase) + join
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
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - Tisseur de chaînes4Blocs, Procs et Lambdas
Qu'est-ce qu'un bloc ?do..end ou accoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes, 2e partie
Hash.new avec valeurs par défautParcourir les hashesHashes imbriquésFusionner et transformerRécapitulatif - Compteur de fréquences10Projet - Dossiers des étudiants
Présentation du projetAjouter un étudiant2Plages
Qu’est-ce qu’une plage ?Méthodes des plagesPlages dans Case / WhenRécapitulatif - Exercices sur les plages5Puissance des Enumerable
Select et RejectChaînage de MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Pipeline de donnéesEntraînez-vous par vous-même : Compilateur Ruby en ligne