Ricerca…


introduzione

Le funzioni avanzate come map , flatMap , filter e reduce vengono utilizzate per operare su vari tipi di raccolta come Array e Dictionary. Le funzioni avanzate richiedono in genere un codice ridotto e possono essere concatenate per creare una logica complessa in modo conciso.

Introduzione con funzioni avanzate

Prendiamo uno scenario per capire le funzioni avanzate in modo migliore,

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]

Funzione mappa:

Utilizza la mappa per eseguire il loop su una raccolta e applicare la stessa operazione a ciascun elemento della raccolta. La funzione mappa restituisce una matrice contenente i risultati dell'applicazione di una funzione di mappatura o trasformazione a ciascun elemento.

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

Funzione Flat-Map:

L'uso più semplice è come suggerisce il nome per appiattire una collezione di collezioni.

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

Funzione filtro:

Utilizza il filtro per eseguire il loop su una raccolta e restituire una matrice contenente solo quegli elementi che corrispondono a una condizione di inclusione.

// 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"]

Ridurre:

Usa riduci per combinare tutti gli elementi di una raccolta per creare un nuovo valore singolo.

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

Appiattisci array multidimensionale

Per appiattire la matrice multidimensionale in una singola dimensione, vengono utilizzate le funzioni avanzate di FlatMap. Altro caso d'uso è quello di trascurare il valore nullo da valori di matrice e mappatura. Vediamo con esempio: -

Supponiamo di disporre di una serie di città multidimensionale e di voler ordinare l'elenco dei nomi delle città in ordine crescente. In tal caso, possiamo usare la funzione flatMap come: -

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

Preparare una lista monodimensionale dall'array multidimensionale,

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

Per ordinare i valori dell'array, possiamo usare l'operazione di concatenamento o ordinare l'array di appiattimento. Qui sotto l'esempio mostra l'operazione di concatenamento,

// 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow