2016-05-12 16 views
0

私はNSMutableArrayのカスタムオブジェクトを持っています。それぞれに固有のID文字列が含まれ、それぞれにdownloadedDateプロパティが含まれています。NSMutable Arrayから重複したカスタムオブジェクトを削除して、最新の複製オブジェクトを保持します。

オブジェクトが2回追加される可能性があります。重複のIDを確認する必要があります。重複が見つかった場合は、最新の日付を保持する必要があります。

現在、私は重複を削除するために以下の作業を行っていますが、オブジェクトを最新の日付に保つことは考慮していません。

NSArray *originalArray = [NSArray arrayWithArray:mutableItems]; 
NSMutableArray *uniqueArray = [NSMutableArray array]; 
NSMutableSet *names = [NSMutableSet set]; 
for (ZSSObject *g in originalArray) { 
    NSString *destinationName = g.code; 
    if (![names containsObject:destinationName]) { 
     [uniqueArray addObject:g]; 
     [names addObject:destinationName]; 
    } 
} 
NSArray *uniqueObjects = uniqueArray; 

オブジェクトは、次のように作成されます:

ZSSObject *obj = [ZSSObject alloc] init]; 
obj.code = @"12345"; 
obj.downloadedDate = [NSDate date]; 

は私のアレイとネストされたループのコピーの束を持つよりも、私がしたいことをやるための簡単な方法はありますか?代わりにNSDictionaryを使用するように提案を使用し

+2

あなたは辞書ではなく、配列を使用する必要があるようですね。その後、新しいオブジェクトを辞書に追加する前に、日付をチェックすることができます。 – Paulw11

+1

ループの前にoriginalArrayを降順でソートすると、あなたの問題が解決します。 – meth

+0

@ Paulw11 - 私はちょうど答えを掲示しました、これがあなたが考えていたものかどうか私に知らせてください。 –

答えて

0

は、私はこの解決策を考え出した:

NSMutableDictionary *objDict = [[NSMutableDictionary alloc] init]; 
for (ZSSObject *g in mutableItems) { 

    ZSSObject *addedObj = objDict[g.code]; 

    if (addedObj) { 

     // Compare dates 
     if ([addedObj respondsToSelector:@selector(dateDownloaded)]) { 

      if ([g.dateDownloaded compare:addedObj.dateDownloaded] == NSOrderedDescending) { 

       [objDict setObject:g forKey:g.code]; 

      } 

     } 

    } else { 
     [objDict setObject:g forKey:g.code]; 
    } 
} 

NSArray *uniqueObj = objDict.allValues; 
+0

はい、これは私がやることです – Paulw11

関連する問題