2017-09-19 6 views
1

私は以下の2つの辞書を併合したいと思います。配列をSwiftの値として辞書をマージする4

var dict1 = ["May 21": [1,2], 
      "May 22": [3,4]] 

var dict2 = ["May 22": [5,6], 
      "May 23": [7,8]] 

これは私が探している結果である:私はスウィフト4で新マージ()関数を見つけた

["May 21": [1, 2], 
"May 22": [3, 4, 5, 6], 
"May 23": [7, 8]] 

dict1.merge(dict2, uniquingKeysWith: { (old, _) in old }) 

しかし、もちろんのウォンのもの配列を適切にマージするのではなく、単に新しい値または古い値で置き換えてください。

これを行うには甘い方法がありますか、いくつかのクロージャを使用していますか?私は&値このようなすべてのキーを通してだけループもちろんできますが、これは少し汚れているようだ:

func mergeDicts(dict1: [String: [Int]], dict2: [String: [Int]]) -> [String: [Int]] { 
    var result = dict1 
    for (key, value) in dict2 { 
     if let resultValue = result[key] { 
      result[key] = resultValue + value 
     } else { 
      result[key] = value 
     } 
    } 
    return result 
} 

答えて

2

あなたは既に右の方法を発見した、あなただけの一意化の閉鎖に 配列の値を連結する必要があります。

var dict1 = ["May 21": [1,2], "May 22": [3,4]] 
var dict2 = ["May 22": [5,6], "May 23": [7,8]] 

dict1.merge(dict2, uniquingKeysWith: +) 

print(dict1) 
// ["May 22": [3, 4, 5, 6], "May 23": [7, 8], "May 21": [1, 2]] 
+0

すばやく返信いただきありがとうございます。 – vfxdev

関連する問題