Menu
Coddy logo textTech

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"]
challenge icon

Défi

Débutant

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

  1. Les nombres supérieurs à 10 (utilisez select), joints par ,
  2. Les nombres non divisibles par 3 (utilisez reject), joints par ,

Pour l'entrée 3,7,12,15,20, la sortie est :

12, 15, 20
7, 20

Aide-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 ", "
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