수색…


소개

map , flatMap , filterreduce 와 같은 고급 함수는 배열 및 사전과 같은 다양한 컬렉션 유형에서 작동하는 데 사용됩니다. 고급 기능은 일반적으로 코드가 거의 필요 없으며 복잡한 논리를 간결하게 구축하기 위해 함께 연결할 수 있습니다.

고급 기능 소개

더 나은 방법으로 발전 기능을 이해하는 시나리오를 생각해 봅시다.

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]

지도 기능 :

map을 사용하여 컬렉션을 반복하고 동일한 작업을 컬렉션의 각 요소에 적용합니다. map 함수는 매핑 또는 변환 함수를 각 항목에 적용한 결과가 들어있는 배열을 반환합니다.

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

평면지도 기능 :

가장 간단한 사용법은 컬렉션 컬렉션을 병합하는 것이 이름에서 알 수 있듯이합니다.

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

필터 기능 :

필터를 사용하여 컬렉션을 반복하고 include 조건과 일치하는 요소 만 포함하는 Array를 반환합니다.

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

줄이다:

reduce를 사용하여 컬렉션의 모든 항목을 결합하여 하나의 새 값을 만듭니다.

스위프트 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

스위프트 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

다차원 배열 전개

다차원 배열을 단일 차원으로 전개하려면 flatMap advance 함수가 사용됩니다. 다른 사용 사례는 배열 및 매핑 값에서 nil 값을 무시하는 것입니다. 예를 들어 보겠습니다.

도시의 다차원 배열이 있고 도시 이름 목록을 오름차순으로 정렬하려고한다고 가정합니다. 이 경우 다음과 같이 flatMap 함수를 사용할 수 있습니다. -

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

다차원 배열에서 단일 차원 목록 준비,

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

배열 값을 정렬하기 위해 체이닝 작업을 사용하거나 병합 된 배열을 정렬 할 수 있습니다. 아래의 예는 체인 작업을 보여 주며,

// 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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow