Menu
Coddy logo textTech

flatMap

Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 29 sur 56.

flatMap est utilisé dans le cas où chaque élément produit plusieurs résultats. La fermeture renvoie un tableau ; flatMap les concatène tous en un seul tableau plat.

let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all)                       // [1, 2, 3, 4, 5, 6]

Vous pouvez également effectuer un travail réel à l'intérieur de la fermeture. Mapper chaque valeur à un petit tableau et aplatir le résultat en une seule étape est le cas d'utilisation typique :

let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs)                     // [1, 1, 2, 4, 3, 9]

Comparez avec map : cela aurait produit un [[Int]], un tableau de petits tableaux, ce qui nécessiterait une étape supplémentaire pour l'aplatir. flatMap combine ces deux étapes en une seule.

challenge icon

Défi

Facile

Lisez deux lignes d'entrée :

  1. Une liste d'entiers séparés par des virgules, les nums
  2. Une liste d'entiers séparés par des virgules, les repeats (de la même longueur que nums)

Pour chaque i, répétez nums[i] exactement repeats[i] fois. Affichez le tableau plat résultant, joint avec ,. Utilisez flatMap.

Pour l'entrée 5,7,2 sur la ligne 1 et 3,1,2 sur la ligne 2, la sortie est 5,5,5,7,2,2.

Aide-mémoire

flatMap mappe chaque élément vers un tableau et concatène tous les résultats en un seul tableau plat :

let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]

Contrairement à map (qui produirait [[Int]]), flatMap aplatit en une seule étape. Il peut également aplatir directement des tableaux imbriqués :

let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]

Essayez vous-même

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: flatMap chaque (num, repeat) dans Array(repeating:count:); joindre 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