Menu
Coddy logo textTech

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.

challenge icon

Défi

Facile

Lisez 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 :

  1. Les entiers (dans l'ordre d'entrée), joints par ,
  2. Le nombre d'entrées qui ont été ignorées (n'ont pas pu être analysées)
  3. La somme des entiers analysés

Pour l'entrée 3,hi,7,!,1,42,oops, la sortie est :

3,7,1,42
3
53

Aide-mémoire

compactMap fonctionne comme map mais supprime automatiquement les résultats nil et déballe le reste :

let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
// [3, 7, 1]  — les nils provenant de chaînes non analysables sont supprimés

Sans compactMap, map retournerait [Int?] avec des nils mélangés, nécessitant une étape de filtrage séparée.

Essayez 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
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