我有两个阵列:
array1
包含object1
类型的对象。 object1
有一个属性id
。
array2
包含object2
类型的对象。 object2
有一个属性object1Id
。
我知道,array2
包含带有ID的对象,这些对象始终位于array1
中,但array1
可以包含更多(或相等)的对象。
要表明:
简化:array1
包含所有对象,array2
包含新对象。如何使用旧对象获取数组..?我试图用谓词来做,但是做一个循环并将每个object1Id
插入到谓词中感觉很奇怪。还有其他选择吗?怎么做得好?
答案 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];