Objective c 目标C:如何将uniques项从一个数组附加到另一个数组?

Objective c 目标C:如何将uniques项从一个数组附加到另一个数组?,objective-c,nsarray,nspredicate,nsset,Objective C,Nsarray,Nspredicate,Nsset,我有一个数组,希望将另一个数组中的N个项附加到该数组中,但只有当前数组中不存在的项 注意,项的唯一性不是由对象内存决定的,而是由其内容决定的。例如,我可以有两个不同的对象,名为Person,名为“David”,我在最终结果中只使用了其中一个对象 做这件事的有效方法是什么?我已经研究了使用NSPredicate和NSOrderedSet执行此操作的选项。[@[arrayOne,arrayTwo]valueForKeyPath:@“@distinctunionofarray.name”]其中name

我有一个数组,希望将另一个数组中的N个项附加到该数组中,但只有当前数组中不存在的项

注意,项的唯一性不是由对象内存决定的,而是由其内容决定的。例如,我可以有两个不同的对象,名为Person,名为“David”,我在最终结果中只使用了其中一个对象


做这件事的有效方法是什么?我已经研究了使用NSPredicate和NSOrderedSet执行此操作的选项。

[@[arrayOne,arrayTwo]valueForKeyPath:@“@distinctunionofarray.name”]
其中
name
是用于合并阵列的属性


请参阅NSHipster的

,使用NSSet可以轻松实现。以下是一个示例解决方案:

//Lines of init can be ignored. Just pay attention to the variables and their comments

NSArray * old = [[NSArray alloc]init]; //Assume this is your old array 
NSArray * more = [[NSArray alloc]init]; //Assume this is your extra array
NSArray * new = [[NSArray alloc]init]; //Assume this is your new array (having duplicates)
new = [old arrayByAddingObjectsFromArray:more];
NSArray *cleanedArray = [[NSSet setWithArray:new] allObjects];
为了便于解释,NSSet会自动删除重复项


警告:它不会保留顺序。如果您想继续维护订单,请在之后对其进行排序,否则会有更复杂的解决方案。

听起来您想使用NSSet、NSOrderedSet和可变的对应项。@vikingosegundo-这能像他所要求的那样过滤唯一的对象吗。内存中不重复但基于匹配属性重复的对象?只需在
Person
中重写
isEqual:
,如果正确实现了相等性,则应该很确定@vikingosegundo-谢谢你的文章和澄清。。。好东西。我认为中的一个线程建议了另一种使用NSOrderedset的方法,在这种方法中,您也可以保留数组的顺序。但是,由于您的任务是追加然后消除,所以DerestoredSet可能没有预期的帮助。无论如何,之后你必须重新排序。