在 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() 進行字典轉換通常包括將字典的值更改為不同的型別,使用閉包更改字典的鍵或值,以及將字典轉換為元組陣列或具有相同或不同鍵和值的另一個字典。

更新於: 2023年5月4日

809 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.