2016-10-25 25 views
0

NSDictionaryを含むNSMutableArrayがあります。 そして、重複した辞書を配列で削除したいと思います。 配列からわかるように、_idが同じ辞書がいくつかあります。 すべての重複した辞書を削除します。Swift 3でNSDictionaryを含むNSMutableArrayの重複フィールドを削除する方法

{ 
    "1": { 
    "_id": 1 
    "-name": "test1" 
    } 
    "2": { 
    "_id": 2 
    "-name": "test2" 
    } 
    "3": { 
    "_id": 1 
    "-name": "test1" 
    } 
    "4": { 
    "_id": 3 
    "-name": "test3" 
    } 
    "5": { 
    "_id": 2 
    "-name": "test2" 
    } 
} 

と同様にここに私のコードです。

let filteredArray:NSMutableArray = [] 
for matchData in self.arrayUserMatches { 
    let matchDictionary = matchData as? NSDictionary 
    if let matchID = matchDictionary?.value(forKey: "_id") { 
     let hasDuplicate = filteredArray.filtered(using: NSPredicate(format: "_id == %@", (matchID as! String))).count > 0 
     if !hasDuplicate { 
      filteredArray.add(matchDictionary) 
     } 
    } 
} 

しかし、それは、reason: '[<_SwiftValue 0x6180002419b0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _id.

のようなエラーが発生し、この分野での経験を持っている誰もがありますか?

+0

いつものように可変財団コレクション型を使用していませんあなたが本当にKVCが何であり、あなたが本当にそれを必要としているのか分からない限り、Swiftと 'valueForKey'を使用しないでください。 – vadian

+0

しかし、これは大きなプロジェクトです、今変更することはできません、あなたは私のために解決策を提供してくれますか? –

+1

NSMutableArrayはありますが、実際は配列ではなく、ネストされたディクショナリを持つ辞書 – alexburtnik

答えて

1

可能であれば、Swiftコレクションを使用する必要がありますが、私はNSDictionaryの例を紹介します。 内部にユニークでない辞書を持つNSDictionaryがあるとします。私は素早い辞書から作成し、後でFoundationオブジェクトのみで操作します。

let input = [ 
    "1":[ 
     "_id": 1, 
     "-name": "test1" 
    ], 
    "2": [ 
     "_id": 2, 
     "-name": "test2" 
    ], 
    "3": [ 
     "_id": 1, 
     "-name": "test1" 
    ], 
    "4": [ 
     "_id": 3, 
     "-name": "test3" 
    ], 
    "5": [ 
     "_id": 2, 
     "-name": "test2" 
    ] 

] 
let inputDict = NSDictionary(dictionary: input) 

私はあなたはそれが同じ_idを持っている場合、辞書が重複して考える前提としています

let uniqueDict = NSMutableDictionary() 
for value in inputDict.allValues { 
    if let dictionary = value as? NSDictionary { 
     let key = dictionary["_id"] as! Int 
     uniqueDict[key] = dictionary 
    } 
} 
print("unique values: \(uniqueDict.allValues)") 

出力:

unique values: [{ 
    "-name" = test3; 
    "_id" = 3; 
}, { 
    "-name" = test1; 
    "_id" = 1; 
}, { 
    "-name" = test2; 
    "_id" = 2; 
}] 
関連する問題