Filter
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 24 sur 56.
filter prend une closure de prédicat et renvoie un nouveau tableau contenant uniquement les éléments pour lesquels la closure a renvoyé true.
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]Le résultat conserve l'ordre d'origine. Le type du résultat correspond au type d'entrée, aucune transformation n'a lieu, seulement une sélection.
filter s'enchaîne naturellement avec map :
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]Lisez chaque chaîne de haut en bas, tout comme un pipeline. Chaque étape produit un nouveau tableau ; rien ne modifie l'original.
Défi
FacileLisez deux lignes d'entrée :
- Une liste d'entiers séparés par des virgules
- Un entier
min
Affichez, sur des lignes séparées :
- Les entiers strictement supérieurs à
min, joints par,(ou vide si aucun ne correspond) - Les carrés des entiers correspondants, joints par
, - Le nombre d'entiers correspondants
Utilisez filter + map en chaîne. Ne faites pas deux itérations sur l'entrée.
Pour l'entrée 1,5,2,8,3,7 sur la ligne 1 et 4 sur la ligne 2, la sortie est :
5,8,7
25,64,49
3Aide-mémoire
Utilisez filter pour sélectionner les éléments correspondant à une condition :
let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]Enchaînez filter avec map sous forme de pipeline :
let result = nums
.filter { $0 > 2 }
.map { $0 * $0 } // [9, 16, 25, 36]Chaque étape renvoie un nouveau tableau ; l'original reste inchangé. L'ordre est préservé.
Essayez vous-même
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO: filtrer > min une fois, puis mapper vers les carrés ; imprimer les deux, puis compter
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
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots