Chaîner Map
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 22 sur 56.
Vous avez découvert map dans les bases, il construit un nouveau tableau en transformant chaque élément. Sa véritable puissance se révèle lorsque vous le chaînez avec select, reject et consorts.
Chaque méthode retourne un tableau, donc l'appel d'une autre méthode sur le résultat se poursuit simplement :
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 les nombres impairs, multipliez chacun par 10. Pas de variables temporaires, pas de boucle.
Le raccourci &:method_name fonctionne chaque fois que le bloc appelle simplement une seule méthode :
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (identique)Ce raccourci est partout dans le code Ruby. Sachez le reconnaître quand vous le voyez.
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, joints par , .
Construisez cela sous forme d'une seule chaîne : utilisez select pour les mots longs, map avec &:upcase, puis join.
Pour l'entrée hi,hello,yo,coddy,sup, la sortie est :
HELLO, CODDYAide-mémoire
Enchaînez les méthodes de tableau — chacune renvoie un nouveau tableau, vous pouvez donc continuer à appeler des méthodes sur le résultat :
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
# [10, 30, 50]Utilisez &:method_name comme raccourci lorsqu'un bloc appelle simplement une seule méthode :
["hi", "yo"].map(&:upcase) # ["HI", "YO"]Essayez vous-même
words = gets.chomp.split(",")
# À FAIRE : 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 - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline