将NSMutableArray与NSArray合并,过滤重复项

Tom*_*rdt 8 objective-c

我有两个数组,一个NSMutableArray和一个NSArray.NSMutableArray是"store",它存储来自NSArrays源的结果.每隔5分钟,就会出现一个新的NSArray,需要对数据进行过滤和排序.

按日期排序非常简单,因此我设法按NSDate排序NSArray.不需要对另一个数组进行排序,因为它只会导致用户混淆.

我想做什么:NSArray有很多不同的对象都响应 - [对象名],返回一个NSString.NSArray需要合并 NSMutableArray中,只需添加对象.

合并本身没有问题,但性能是.NSMutableArray最多可包含3000个项目,NSArray最多可包含250个项目,但通常只有5个或6个项目必须合并到NSMutableArray中.

所以,我的问题是:如何在Objective-C中合并两个数组,过滤重复项,而不迭代(250*3000)次?

汤姆

编辑以澄清某些
内容"重复"对象是与用户重复但不与代码重复的对象.它们具有相同的名称,但不是相同的地址.

更多说明: @"value" != @"value" // true

End*_*mic 10

name存储在阵列中的对象的属性?如果是这样,你可以使用一个相当简单的NSPredicate来过滤不可变数组,然后再将结果添加到可变数组中.这是一个例子:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE name == %@.name", mutableArray];
resultsArray = [immutableArray filteredArrayUsingPredicate:predicate];
[mutableArray addObjectsFromArray:immutableArray];
Run Code Online (Sandbox Code Playgroud)

  • 由于一个不明原因,它引发了一个异常(iOS7):'ALL或ANY运算符的左侧必须是NSArray或NSSet.在颠倒谓词字符串的顺序时,它工作正常:@"NONE%@.name == name" (3认同)

Rod*_*igo 6

这个怎么样:

[mutable removeObjectsInArray:newArray];
[mutable addObjectsFromArray:newArray];
Run Code Online (Sandbox Code Playgroud)

它不是最胖的,但很容易实现:)