compactMap
Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 28 sur 56.
compactMap est map avec les optionnels filtrés. La fermeture peut renvoyer un Optional ; compactMap élimine les résultats nil et déballe le reste.
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [3, 7, 1]Int("hi") retourne nil car il ne peut pas analyser de nombre à partir de "hi". compactMap les élimine automatiquement et vous donne un [Int] propre.
Sans cela, vous écririez strings.map { Int($0) } et obtiendriez un [Int?] avec des nils mélangés, puis vous devriez les filtrer vous-même. compactMap effectue les deux étapes en une seule.
Défi
FacileLisez une seule ligne d'entrée : un mélange d'entiers et de texte inutile séparés par des virgules (certaines entrées ne peuvent pas être analysées).
Affichez :
- Les entiers (dans l'ordre d'entrée), joints par
, - Le nombre d'entrées qui ont été ignorées (n'ont pas pu être analysées)
- La somme des entiers analysés
Pour l'entrée 3,hi,7,!,1,42,oops, la sortie est :
3,7,1,42
3
53Essayez vous-même
let parts = readLine()!.components(separatedBy: ",")
// TODO: compactMap vers des entiers ; afficher les éléments joints, le nombre d'éléments supprimés, la somme
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 mots3Dictionnaires
Déclarer des dictionnairesRecherche optionnelleMettre à jour des dictionnairesParcourir des dictionnairesGrouper des valeursRécapitulatif - Inventaire6Fonctions d'ordre supérieur, partie 2
compactMapflatMapsorted(by:)Construction de pipelinesRécapitulatif - Tableau de classementEntraînez-vous par vous-même : Playground Swift