let arra = ["abc","def","abc","def"]
let arra2 = ["addr1","addr2","addr1","addr2"]
一個鍵值對的預期輸出如何將兩個字典中的值,如SWIFT
dic = ["abc":"addr1","addr1" , def: "addr2","addr2"]
let arra = ["abc","def","abc","def"]
let arra2 = ["addr1","addr2","addr1","addr2"]
一個鍵值對的預期輸出如何將兩個字典中的值,如SWIFT
dic = ["abc":"addr1","addr1" , def: "addr2","addr2"]
使用zip(_:_:)
和reduce(_:_:)
結合:
let array1 = ["abc", "def", "abc", "def"]
let array2 = ["addr1", "addr2", "addr1", "addr2"]
let dictionary = zip(array1, array2).reduce([String: String]()) {
var dictionary = $0
dictionary[$1.0] = $1.1
return dictionary
}
print(dictionary) // ["abc": "addr1", "def": "addr2"]
應該有更簡單的方法,但一般:
import UIKit
let keyArray = ["abc","def","abc","def"]
let valueArray = ["addr1","addr2","addr1","addr2"]
let setFromKeyArray = Set(keyArray)
var finalDict = [String: [String]]()
for index in 0..<keyArray.count {
if let _ = finalDict[keyArray[index]] {
finalDict[keyArray[index]]!.append(valueArray[index])
} else {
finalDict[keyArray[index]] = [valueArray[index]]
}
}
print(finalDict)
// output: ["abc": ["addr1", "addr1"], "def": ["addr2", "addr2"]]
let arra = ["abc", "def", "abc", "def"]
let arra2 = ["addr1", "addr2", "addr1", "addr2"]
let dict = zip(arra, arra2).reduce([String:[String]]()){
var d = $0
d[$1.0] = ($0[$1.0] ?? []) + [$1.1]
return d
}
print(dict) // ["def": ["addr2", "addr2"], "abc": ["addr1", "addr1"]]
還記得詞典是無序的。
斯威夫特4的新字典初始化讓你做那種事容易:
let arra = ["abc","def","abc","def"]
let arra2 = ["addr1","addr2","addr1","addr2"]
let dict = [String:[String]](zip(arra,arra2.map{[$0]}),uniquingKeysWith:+)
print(dict) // ["abc": ["addr1", "addr1"], "def": ["addr2", "addr2"]]
[編輯]斯威夫特3等價:
var dict : [String:[String]] = [:]
zip(arra,arra2.map{[$0]}).forEach{ dict[$0] = (dict[$0] ?? []) + $1 }
尼斯。技巧就是將每個數組元素映射到一個單一的元素數組中。 –
你可以在迅速3嗎? –
您可以使用如下:
let arra = ["abc","def","abc","def"]
let arra2 = ["addr1","addr2","addr1","addr2"]
var dictionary: [String: String] = [:]
dictionary.merge(zip(arra, arra2)) { (old, new) -> String in
return "\(old), \(new)"
}
print(dictionary)
輸出:
["abc": "addr1, addr1", "def": "addr2, addr2"]
.merge無法快速入門3 –
您所提供的輸出字典的格式不正確。你的意思是'dic = [「abc」:「addr1」,「def」:「addr2」]'? –
你的「預期輸出」是有些怪異(無效)語法的一半字典和半陣列。你能澄清你的意思嗎? – Ssswift
請編輯您的問題並修復預期輸出。你可能意味着'[ 「ABC」: 「ADDR1」, 「ADDR1」], 「高清」: 「ADDR2」, 「ADDR2」]]' –