Suche…


Einführung

Advance - Funktionen wie map , flatMap , filter und reduce werden verwendet , auf verschiedenen Kollektionstypen wie Array und Wörterbuch zu arbeiten. Advance-Funktionen erfordern normalerweise wenig Code und können miteinander verkettet werden, um komplexe Logik auf einfache Weise aufzubauen.

Einführung mit erweiterten Funktionen

Nehmen wir ein Szenario, um die Vorwärtsfunktion besser zu verstehen.

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]

Kartenfunktion:

Verwenden Sie map, um eine Sammlung zu durchlaufen, und wenden Sie auf jedes Element in der Sammlung die gleiche Operation an. Die Kartenfunktion gibt ein Array zurück, das die Ergebnisse der Anwendung einer Zuordnungs- oder Transformationsfunktion auf jedes Element enthält.

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

Flat-Map-Funktion:

Die einfachste Verwendung ist, wie der Name nahe legt, eine Sammlung von Sammlungen zu reduzieren.

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

Filterfunktion:

Verwenden Sie einen Filter, um eine Sammlung zu durchlaufen und ein Array zurückzugeben, das nur die Elemente enthält, die einer Include-Bedingung entsprechen.

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

Reduzieren:

Verwenden Sie "verkleinern", um alle Elemente in einer Sammlung zu kombinieren, um einen einzelnen neuen Wert zu erstellen.

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

Reduzieren Sie das mehrdimensionale Array

Um mehrdimensionale Arrays auf einzelne Dimensionen zu reduzieren, werden die erweiterten Funktionen von flatMap verwendet. Ein anderer Anwendungsfall besteht darin, den Nullwert von Array- und Mapping-Werten zu vernachlässigen. Schauen wir uns das Beispiel an: -

Angenommen, Wir haben ein mehrdimensionales Array von Städten und möchten die Städtenamenliste in aufsteigender Reihenfolge sortieren. In diesem Fall können wir die flatMap-Funktion wie folgt verwenden:

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

Vorbereiten einer eindimensionalen Liste aus einem mehrdimensionalen Array,

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

Zum Sortieren von Arraywerten können wir eine Verkettungsoperation oder ein Sortierflatt-Array verwenden. Hier unten ein Beispiel, das den Verkettungsvorgang zeigt.

// 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow