[英]Combine two arrays to one dictionary in Swift
我有兩個數組:
let data = ["12 Mai 2021", "12 Mai 2021"]
let prices = [45.0, 50.0]
現在我想將這兩個轉換為一個字典,如下所示:
["12 Mai 2021":45.0, "12 Mai 2021":50.0]
如果 output 可以是:
[("12 Mai 2021",45.0),("12 Mai 2021",50.0)]
但我不知道這是否可能......在這個板上,我已經偶然發現了“zip”解決方案,如下所示:
var dictionary = [String: Double]()
zip(data, prices).forEach { dictionary[$0] = $1 }
print(dictionary)
但這以某種方式只是打印:
["12 Mai 2021": 50.0]
有人知道可行的解決方案嗎? 先感謝您!
你說你想要這個Dictionary
:
["12 Mai 2021":45.0, "12 Mai 2021":50.0]
但這是不可能的。 Dictionary
中的每個鍵都必須是唯一的。 鑰匙"12 Mai 2021"
不能使用兩次。
然后你說你更喜歡這個“輸出”:
[("12 Mai 2021",45.0),("12 Mai 2021",50.0)]
那是一對數組(2元組),您可以使用zip
得到答案:
let pairs = zip(data, prices).map { $0 }
// Type of pairs is [(String, Double)].
如果您真的想要Dictionary
,那么您必須決定如何處理重復鍵。 也許您希望 map 的每個日期鍵到該日期的價格數組。 這是一種方法:
let d = Dictionary(zip(data, prices.map { [$0] })) { $0 + $1 }
// Result: ["12 Mai 2021": [45.0, 50.0]]
這是上面代碼的作用。
prices.map { [$0] }
將prices
從[Double]
轉換為[[Double]]
,即轉換為Double
的 arrays 數組,其中每個內部數組僅包含一個價格: [[45.0], [50.0]]
.
zip
將日期和單價 arrays 組合成對: [("12 Mai 2021", [45.0]), ("12 Mai 2021", [50.0])]
。
Dictionary
初始化程序將對數組轉換為[String: [Double]]
。 當它找到重復的鍵時,它使用閉包{ $0 + $1 }
組合相應的值。 在這里, $0
和$1
都是[Double]
,所以閉包加入了 arrays。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.