我有NSArray
个自定义对象,并希望将该数组过滤为特定键上的唯一。我在搜索答案时看到的大部分内容都涉及使用valueForKey:
,valueForKeyPath:
或@distinctUnionOfObjects
,但这些会返回该键的值数组。我想要整个对象。
对象是Parse的子类PFObject
,所以它们符合KVC,我希望它们在objectId
键上过滤。
答案 0 :(得分:3)
将它放在NSArray的一个类别中:
-(NSArray*)arrayFilteredForUniqueValuesOfKeyPath:(NSString*)keyPath
{
NSMutableSet* valueSeen = [NSMutableSet new];
return [self filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
id value = [evaluatedObject valueForKeyPath:keyPath];
if(![valueSeen containsObject:value])
{
[valueSeen addObject:value];
return true;
}
else
{
return false;
}
}]];
}
当然,这个概念有点瑕疵,因为你真的无法确定哪个n对象对你真正想要的keyPath有任何贡献(在这种情况下你得到第一个)