Swift Language
スウィフトアドバンス機能
サーチ…
前書き
map
、 flatMap
、 filter
、およびreduce
ようなアドバンス関数は、ArrayやDictionaryのようなさまざまなコレクション型を操作するreduce
に使用されます。アドバンス機能は通常、コードをほとんど必要とせず、複雑なロジックを簡潔に構築するために連鎖させることができます。
先進機能の導入
より良い方法で先進機能を理解するためのシナリオを考えてみましょう。
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"]
フィルター機能:
フィルタを使用してコレクションをループし、インクルード条件に一致する要素のみを含む配列を返します。
// 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を使用して、コレクション内のすべてのアイテムを結合して、単一の新しい値を作成します。
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
スイフト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関数が使用されます。他のユースケースは、配列とマッピング値からのゼロ値を無視することです。例を見てみましょう: -
都市の多次元配列を持ち、都市名リストを昇順でソートしたいとします。その場合、次のような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