Objective-C:如何将数组中的唯一项附加到另一个数组?

时间:2014-05-13 22:09:50

标签: objective-c nsarray nspredicate nsset

我有一个数组,想要从另一个数组中追加N个项目,但只有当前数组中尚不存在的项目。

注意,item的唯一性不是由对象内存决定的,而是由其内容决定的。例如,我可以有两个名为Person的名字" David"在我的最终结果中,我只是其中之一。

这是一种有效的方法吗?我已经查看了使用NSPredicate和NSOrderedSet进行此操作的选项。

2 个答案:

答案 0 :(得分:1)

[@[arrayOne,arrayTwo] valueForKeyPath:@"@distinctUnionOfArrays.name"]其中name是将数组合并为。

的属性

见NSHipster的KVC Collection Operators

答案 1 :(得分:0)

使用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会自动删除重复项。

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