2017-10-09 48 views
-5
let arra = ["abc","def","abc","def"] 
let arra2 = ["addr1","addr2","addr1","addr2"] 

一個鍵值對的預期輸出如何將兩個字典中的值,如SWIFT

dic = ["abc":"addr1","addr1" , def: "addr2","addr2"] 
+0

您所提供的輸出字典的格式不正確。你的意思是'dic = [「abc」:「addr1」,「def」:「addr2」]'? –

+3

你的「預期輸出」是有些怪異(無效)語法的一半字典和半陣列。你能澄清你的意思嗎? – Ssswift

+0

請編輯您的問題並修復預期輸出。你可能意味着'[ 「ABC」: 「ADDR1」, 「ADDR1」], 「高清」: 「ADDR2」, 「ADDR2」]]' –

回答

0

使用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"] 
0

應該有更簡單的方法,但一般:

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"]] 
0

最好的DennisKristijanAlain

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"]] 

還記得詞典是無序的。

2

斯威夫特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 } 
+0

尼斯。技巧就是將每個數組元素映射到一個單一的元素數組中。 –

+0

你可以在迅速3嗎? –

0

您可以使用如下:

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"] 
+0

.merge無法快速入門3 –

相關問題