2017-01-02 3 views
-4

上の明確な私はこのような辞書の配列を持って取得:Dictinct迅速な辞書からの値が、1つのキーだけ

"subtitles": [{ 
       "index": 0, 
       "language": "eng", 
       "name": "" 
      }, { 
       "index": 1, 
       "language": "eng", 
       "name": "" 
      }, { 
       "index": 2, 
       "language": "rus", 
       "name": "" 
      }, { 
       "index": 3, 
       "language": "chi", 
       "name": "" 
      }, { 
       "index": 4, 
       "language": "est", 
       "name": "" 
      }, { 
       "index": 5, 
       "language": "hin", 
       "name": "" 
      }, { 
       "index": 6, 
       "language": "ind", 
       "name": "" 
      }, { 
       "index": 7, 
       "language": "kor", 
       "name": "" 
      }, { 
       "index": 8, 
       "language": "lav", 
       "name": "" 
      }, { 
       "index": 9, 
       "language": "lit", 
       "name": "" 
      }, { 
       "index": 10, 
       "language": "msa", 
       "name": "" 
      }, { 
       "index": 11, 
       "language": "chi", 
       "name": "" 
      }, { 
       "index": 12, 
       "language": "pol", 
       "name": "" 
      }, { 
       "index": 13, 
       "language": "tam", 
       "name": "" 
      }, { 
       "index": 14, 
       "language": "tel", 
       "name": "" 
      }, { 
       "index": 15, 
       "language": "tha", 
       "name": "" 
      }, { 
       "index": 16, 
       "language": "ukr", 
       "name": "" 
      }, { 
       "index": 17, 
       "language": "vie", 
       "name": "" 
      }] 

私は唯一の言語キーのユニークなをしたいです。上記の配列では、最初の2つの要素は "eng"という言語を持っていますが、フィルタリングされた配列には1番目または2番目の要素だけが必要です。

+5

私はなりたい私の私道に砂利の山を持ってどこかに –

答えて

0

あなたは重複の言語を無視して、あなたの配列を減らすことができる:

let reducedSubtitles = dict["subtitles"]!.reduce([[String: Any]]()) { (result, current) in 
    if result.contains(where: { $0["language"] as? String == current["language"] as? String }) { 
     return result 
    } 

    return result + [current] 
} 
+0

あまりにもsimpleBobありがとうございました。これは私の目的を解決しました。 – Avim

1

この解決策を試してみてください。

let subtitleArray:[[String:Any]] = inputDictionary["subtitles"] as! [[String:Any]]  

    var languageArray = [String]() 

    var filteredSubtitleArray = subtitleArray.filter { (dict) -> Bool in 

      guard let lang = dict["language"] as? String,languageArray.contains(lang) == false else { 
       return false 
      } 

      languageArray.append(lang) 

      return true 
     } 
+0

返信用uはそんなにありがとう。私はこれを試してみる。 – Avim

関連する問題