Select et Reject
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 21 sur 56.
La méthode select retourne un nouveau tableau contenant uniquement les éléments pour lesquels le bloc renvoie une valeur considérée comme vraie (truthy). C'est ainsi que Ruby écrit « filter ».
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect # [2, 4, 6]reject est l'opposé, il garde tout ce pour quoi le bloc retourne faux :
odds = numbers.reject { |n| n.even? }
puts odds.inspect # [1, 3, 5]Les deux renvoient un nouveau tableau ; l'original reste inchangé.
Le bloc est simplement un prédicat, tout ce qui est évalué comme vrai ou faux fonctionne :
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]Défi
DébutantLisez une liste d'entiers séparés par des virgules. Affichez deux lignes :
- Les nombres supérieurs à
10(utilisezselect), joints par, - Les nombres non divisibles par
3(utilisezreject), joints par,
Pour l'entrée 3,7,12,15,20, la sortie est :
12, 15, 20
7, 20Aide-mémoire
select retourne un nouveau tableau contenant les éléments pour lesquels le bloc est vrai (comme "filter") :
evens = [1,2,3,4].select { |n| n.even? } # [2, 4]reject est l'opposé, conservant les éléments pour lesquels le bloc est faux :
odds = [1,2,3,4].reject { |n| n.even? } # [1, 3]Les deux retournent un nouveau tableau ; l'original reste inchangé.
Essayez vous-même
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: ligne 1, nombres > 10, joints avec ", "
# TODO: ligne 2, nombres NON divisibles par 3, joints avec ", "
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