Recherche…


Introduction

Fonctions Advance comme map , flatMap , filter et reduce sont utilisés pour faire fonctionner sur différents types de collections comme matrice et le dictionnaire. Les fonctions avancées nécessitent généralement peu de code et peuvent être enchaînées afin de construire une logique complexe de manière concise.

Introduction aux fonctions avancées

Prenons un scénario pour mieux comprendre la fonction avancée,

struct User {
    var name: String
    var age: Int
    var country: String?
}

//User's information 
let user1 = User(name: "John", age: 24, country: "USA")
let user2 = User(name: "Chan", age: 20, country: nil)
let user3 = User(name: "Morgan", age: 30, country: nil)
let user4 = User(name: "Rachel", age: 20, country: "UK")
let user5 = User(name: "Katie", age: 23, country: "USA")
let user6 = User(name: "David", age: 35, country: "USA")
let user7 = User(name: "Bob",age: 22, country: nil)

//User's array list
let arrUser = [user1, user2, user3, user4, user5, user6, user7]

Fonction de la carte:

Utilisez map pour effectuer une boucle sur une collection et appliquer la même opération à chaque élément de la collection. La fonction map renvoie un tableau contenant les résultats de l'application d'une fonction de mappage ou de transformation à chaque élément.

//Fetch all the user's name from array 
let arrUserName = arrUser.map({ $0.name }) // ["John", "Chan", "Morgan", "Rachel", "Katie", "David", "Bob"]

Fonction Flat-Map:

L'utilisation la plus simple est, comme son nom l'indique, d'aplatir une collection de collections.

// Fetch all user country name & ignore nil value.
let arrCountry = arrUser.flatMap({ $0.country }) // ["USA", "UK", "USA", "USA"]

Fonction de filtre:

Utilisez le filtre pour parcourir une collection et renvoyer un tableau contenant uniquement les éléments correspondant à une condition d'inclusion.

// Filtering USA user from the array user list.
let arrUSAUsers = arrUser.filter({ $0.country == "USA" }) // [user1, user5, user6]

// User chaining methods to fetch user's name who live in USA 
let arrUserList = arrUser.filter({ $0.country == "USA" }).map({ $0.name }) // ["John", "Katie", "David"]

Réduire:

Utilisez réduire pour combiner tous les éléments d'une collection afin de créer une nouvelle valeur unique.

Swift 2.3: -

//Fetch user's total age.
let arrUserAge = arrUser.map({ $0.age }).reduce(0, combine: { $0 + $1 }) //174

//Prepare all user name string with seperated by comma 
let strUserName = arrUserName.reduce("", combine: { $0 == "" ? $1 : $0 + ", " + $1 }) // John, Chan, Morgan, Rachel, Katie, David, Bob

Swift 3: -

//Fetch user's total age.
let arrUserAge = arrUser.map({ $0.age }).reduce(0, { $0 + $1 }) //174

//Prepare all user name string with seperated by comma 
let strUserName = arrUserName.reduce("", { $0 == "" ? $1 : $0 + ", " + $1 }) // John, Chan, Morgan, Rachel, Katie, David, Bob

Aplatir un tableau multidimensionnel

Pour aplatir un tableau multidimensionnel en une seule dimension, les fonctions avancées de flatMap sont utilisées. Un autre cas d'utilisation est de négliger la valeur nulle des valeurs de tableau et de mappage. Vérifions avec exemple: -

Supposons que nous ayons un tableau multidimensionnel de villes et que nous souhaitons classer la liste des noms de ville par ordre croissant. Dans ce cas, nous pouvons utiliser la fonction flatMap comme: -

let arrStateName = [["Alaska", "Iowa", "Missouri", "New Mexico"], ["New York", "Texas", "Washington", "Maryland"], ["New Jersey", "Virginia", "Florida", "Colorado"]]

Préparer une liste à une seule dimension à partir d'un tableau multidimensionnel,

let arrFlatStateList = arrStateName.flatMap({ $0 }) // ["Alaska", "Iowa", "Missouri", "New Mexico", "New York", "Texas", "Washington", "Maryland", "New Jersey", "Virginia", "Florida", "Colorado"]

Pour trier les valeurs de tableau, nous pouvons utiliser une opération de chaînage ou trier un tableau à plat. Voici l'exemple ci-dessous montrant l'opération de chaînage,

// Swift 2.3 syntax 
let arrSortedStateList = arrStateName.flatMap({ $0 }).sort(<) // ["Alaska",     "Colorado", "Florida", "Iowa", "Maryland", "Missouri", "New Jersey", "New Mexico", "New York", "Texas", "Virginia", "Washington"]

// Swift 3 syntax
let arrSortedStateList = arrStateName.flatMap({ $0 }).sorted(by: <) // ["Alaska", "Colorado", "Florida", "Iowa", "Maryland", "Missouri", "New Jersey", "New Mexico", "New York", "Texas", "Virginia", "Washington"]


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow