2017-12-30 39 views
2

Swiftのコレクションから辞書を構築するためにSwift reduceを使用しようとしています。 私は、次の変数があります。私は全然見てみたい私は_squares Swiftでreduceを使用して辞書を作成する

  • 内のすべての要素を反復処理したい

    • :私は次のようにint型_units辞書を埋めたい

      var _squares : [String] = [] 
      var _unitlist : [[String]] = [] 
      var _units = [String: [[String]]]() 
      

      をリストは_unitlistであり、要素を含むものだけをフィルタリングします。

    • すべての要素をキーとして持つリストを作成し、そのような要素を含むリストのリスト値として。

    例を挙げてください。我々が持っている場合:

    squares = ["A"] 
    unitlist = [["A", "B", "C"], ["A", "C"], ["B", "C", "F"]] 
    

    を期待出力は、キーと値として[["A", "B", "C"], ["A", "C"]]として辞書ディ「A」である必要があります。その後、私は濾過し、私はreduceを使用しようと、私は反復するために二回flatMapを使用

    _units = _squares.flatMap { s in 
        _unitlist.flatMap { $0 }.filter {$0.contains(s)} 
         .reduce([String: [[String]]]()){ (dict, list) in 
          dict.updateValue(l, forKey: s) 
          return dict 
        } 
    } 
    

    は、私はこのような何かを試してみました。

    しかし、このコードでは、私は次のエラーに直面しています:Cannot assign value of type '[(key: String, value: [[String]])]' to type '[String : [[String]]]'それは私にはあまり知られていません。

  • 答えて

    3
    let squares = ["A"] 
    let unitlist = [["A", "B", "C"], ["A", "C"], ["B", "C", "F"]] 
    
    let units = squares.reduce(into: [String: [[String]]]()) { result, key in 
        result[key] = unitlist.filter { $0.contains(key) } 
    } 
    
    +0

    ニースとエレガントなソリューション:ここ遊び場です!もう少し詳しいことを教えていただけますか? –

    +1

    @ジョヴァンニグラノもちろん、私の答えには何を凝縮したいですか? –

    +1

    Swiftはタイプを推論する言語です 'reduce(into:[:])' –

    1

    filterを使用すると、キーを反復処理して値を構成できます。

    import PlaygroundSupport 
    import UIKit 
    
    
    let squares = ["A"] 
    let unitlist = [["A", "B", "C"], ["A", "C"], ["B", "C", "F"]] 
    
    func dictionary(keys: [String], containing values: [[String]]) -> [String: [[String]]]{ 
        var dictionary: [String: [[String]]] = [:] 
        keys.forEach { key in 
        dictionary[key] = values.filter { $0.contains(key) } 
        } 
        return dictionary 
    } 
    
    print(dictionary(keys: squares, containing: unitlist)) 
    
    関連する問題