2
votes

Problème de compréhension de compactMap et flatMap

J'ai parcouru plusieurs didacticiels sur le fait que flatMap / compactMap est utilisé pour aplatir un tableau de tableaux mais dans mon cas, cela ne fonctionne pas ou je ne le comprends pas correctement .

Result:[[Optional("Raja"), Optional("Kumar"), nil, Optional("Waqas")], [Optional("UAE"), Optional("SINGAPORE"), Optional("dUBAI"), Optional("HONGKONG")]]

OutPut:

let myArray = [["Raja","Kumar", nil,"Waqas"],["UAE","SINGAPORE","dUBAI","HONGKONG"]]
let final = myArray.compactMap{ $0 }

print("Result:\(final)")

J'ai essayé de supprimer nil du tableau ci-dessus, mais cela n'aplatit toujours pas mon array.

Toute aide serait très appréciée.


1 commentaires

En bref: compactMap filtre toutes les valeurs nil d'un tableau, flatMap transforme un tableau de tableaux en un seul tableau en tirant toutes les valeurs du tableaux imbriqués en un seul.


3 Réponses :


5
votes

.compactMap

... est utilisé pour produire une liste sans objets optionnels, vous devez utiliser compactMap sur le tableau intérieur où vous avez nil s, comme ceci:

let result = myArray.flatMap { $0.compactMap { $0 } }

Résultat: [["Raja", "Kumar", "Waqas" ], ["UAE", "SINGAPOUR", "dUBAI", "HONGKONG"]]


.flatmap

... est utilisé pour aplatir une collection de collections, par exemple

let result = myArray.map { $0.compactMap { $0 } }

Résultat: ["Raja", "Kumar", "Waqas", "UAE", "SINGAPOUR", "dUBAI", "HONGKONG"]


0 commentaires

3
votes

compactMap doit être utilisé pour filtrer les éléments nil d'un tableau de Optional s, tandis que flatMap peut être utilisé pour aplatir un tableau multidimensionnel. Cependant, vous devez faire les deux.

let final = myArray.flatMap{$0.compactMap{$0}}

print("Result:\(final)")


0 commentaires

3
votes

Veuillez lire la documentation

carte (_ :)

Renvoie un tableau contenant les résultats du mappage de la fermeture donnée sur les éléments de la séquence.

compactMap (_ :)

Renvoie un tableau contenant les résultats non nuls de l'appel de la transformation donnée avec chaque élément de cette séquence.

flatMap (_ :)

Renvoie un tableau contenant les résultats concaténés de l'appel de la transformation donnée avec chaque élément de cette séquence.

Chaque section Discussion contient un exemple.


0 commentaires