使用其他数组过滤数组

时间:2014-02-26 23:32:54

标签: ios objective-c nsarray nspredicate

我有两个阵列:

array1包含object1类型的对象。 object1有一个属性id

array2包含object2类型的对象。 object2有一个属性object1Id

我知道,array2包含带有ID的对象,这些对象始终位于array1中,但array1可以包含更多(或相等)的对象。 要表明:

Arrays

简化:array1包含所有对象,array2包含新对象。如何使用旧对象获取数组..?我试图用谓词来做,但是做一个循环并将每个object1Id插入到谓词中感觉很奇怪。还有其他选择吗?怎么做得好?

3 个答案:

答案 0 :(得分:3)

您可以使用谓词,如果使用KVC则不需要循环。

获取应排除的ID数组:

NSArray *excludeIds = [array2 valueForKey@"object1Id"];

创建谓词:

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"NOT (id IN %@)", excludeIds];

然后过滤:

NSArray *oldObjects = [array1 filteredArrayUsingPredicate:filterPredicate];

答案 1 :(得分:1)

看起来您正在尝试执行设置操作。可能有用的是NSMutableSet课程。使用setWithArray创建集。然后使用如下方法:

  • unionSet:
  • minusSet:
  • intersectSet:
  • setSet:

获取符合条件的子集。

来源:NSMutableSet Class Reference

希望它有所帮助。

答案 2 :(得分:0)

NSArray*            oldIds = [array2 valueForKeyPath:@"object1Id"];
NSPredicate*        predicate = [NSPredicate predicateWithFormat:@"NOT (id IN %@)", oldIds];
NSArray*            objects = [array1 filteredArrayUsingPredicate:predicate];