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

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

Entraînez-vous par vous-même : Playground Swift