在 Swift 中,應用 map() 函式到字典的最簡潔方法是什麼?
在 Swift 中,我們可以使用 map() 方法應用於字典,從而對字典的值進行轉換。此方法返回一個新建立的物件,該物件與原始字典具有相同的鍵,但值由對映函式轉換。
示例 1:使用閉包轉換值
在下面的示例中,我們使用 mapValues() 函式對字典中的每個值執行乘法運算。我們傳遞一個閉包,該閉包接受一個引數。在結果字典中,您可以看到每個值都已加倍。
import Foundation
let inputDictionary = [1: 2, 3: 4, 5: 6, 7: 8, 9: 10]
let modifiedDictionary = inputDictionary.mapValues { $0 * 2 }
print("Input Dictionary: \(inputDictionary)")
print("Modified Dictionary: \(modifiedDictionary)")
輸出
Input Dictionary: [5: 6, 9: 10, 3: 4, 7: 8, 1: 2] Modified Dictionary: [5: 12, 9: 20, 3: 8, 7: 16, 1: 4]
請注意,mapValues() 返回一個新的字典,因此原始字典不會被修改。如果您需要就地修改原始字典,則可以使用 for...in 迴圈遍歷字典的鍵和值,並根據需要更新值。
示例 2:使用閉包轉換鍵值對
以下是用 map() 函式對字串字典進行轉換以建立新的包含大寫鍵值對陣列的示例 -
在 Swift 中,您可以使用 map() 函式將字典轉換為鍵值對陣列,這些鍵值對已根據您提供的閉包進行轉換。
import Foundation
let inputDictionary = ["apple": "red", "banana": "yellow", "orange": "orange"]
let transformedArray = inputDictionary.map { (key, value) in
return (key.uppercased(), value.uppercased())
}
print("Input Dictionary: \(inputDictionary)")
print("Transformed Array: \(transformedArray)")
輸出
Input Dictionary: ["apple": "red", "banana": "yellow", "orange": "orange"]
Transformed Array: [("APPLE", "RED"), ("BANANA", "YELLOW"), ("ORANGE", "ORANGE")]
在上面的示例中,我們將鍵值對轉換為元組。每個元組都包含一個大寫的鍵和值。我們使用 map() 函式訪問鍵值對,並返回一個包含大寫鍵值對的元組。
您應該注意,結果陣列與原始字典不同。如果您想保持順序,可以使用 sorted() 函式根據原始鍵對輸出陣列進行排序。
示例 3:使用閉包轉換鍵
在此示例中,我們使用 map() 將字典鍵轉換為大寫。結果 transformedKeys 陣列將包含轉換後的鍵 ["ORANGE", "BANANA", "APPLE"]。
import Foundation
let inputDictionary = ["apple": "red", "banana": "yellow", "orange": "orange"]
let transformedKeys = inputDictionary.map { (key, value) in
return key.uppercased()
}
print("Input Dictionary: \(inputDictionary)")
print("Transformed Keys: \(transformedKeys)")
輸出
Input Dictionary: ["banana": "yellow", "orange": "orange", "apple": "red"] Transformed Keys: ["BANANA", "ORANGE", "APPLE"]
示例 4:轉換物件字典
在此示例中,我們有一個字典,其中值為自定義類 Person 的物件。我們使用 map() 將字典轉換為字串陣列,其中每個字串都包含人員的姓名和年齡。我們使用閉包的值引數訪問每個 Person 物件的 name 和 age 屬性。
import Foundation
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let peopleDict = ["Alice": Person(name: "Alice", age: 30),
"Bob": Person(name: "Bob", age: 25),
"Charlie": Person(name: "Charlie", age: 35)]
let namesAndAges = peopleDict.map { (key, value) in
return "\(value.name) (\(value.age))"
}
print("namesAndAges: \(namesAndAges)")
輸出
namesAndAges: ["Alice (30)", "Charlie (35)", "Bob (25)"]
示例 5:對映包含可選值的字典
在此示例中,我們有一個字典,其中值為可選整數。我們使用 compactMapValues() 方法刪除值為空的任何鍵值對。這將返回一個僅包含非空值的新字典。
import Foundation
let inputDictionary: [String: Int?] = ["apple": 3, "banana": nil, "orange": 2, "pear": 4, "kiwi": nil]
let nonNilValues = inputDictionary.compactMapValues { $0 }
print("Input Dictionary: \(inputDictionary)")
print("nonNilValues: \(nonNilValues)")
輸出
Input Dictionary: ["apple": Optional(3), "kiwi": nil, "banana": nil, "orange": Optional(2), "pear": Optional(4)] nonNilValues: ["orange": 2, "apple": 3, "pear": 4]
結論
Swift 中一個強大的高階函式 map() 使您能夠根據提供的閉包更改一組元件。當涉及字典時,可以使用 map() 函式將字典的鍵、值或鍵值組合轉換為新集合。
使用 map() 進行字典轉換通常包括將字典的值更改為不同的型別,使用閉包更改字典的鍵或值,以及將字典轉換為元組陣列或具有相同或不同鍵和值的另一個字典。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP