2
我有一个NSArray
自定义对象,并且想要过滤该数组以在特定键上唯一。我在搜索答案时看到的大部分内容涉及到使用valueForKey:
,valueForKeyPath:
或@distinctUnionOfObjects
,但那些返回数组的值为该密钥。我想要整个对象。基于密钥获取对象的唯一NSArray
对象被分类为PFObject
s,因此它们符合KVC,我希望它们在objectId
键上过滤。
我有一个NSArray
自定义对象,并且想要过滤该数组以在特定键上唯一。我在搜索答案时看到的大部分内容涉及到使用valueForKey:
,valueForKeyPath:
或@distinctUnionOfObjects
,但那些返回数组的值为该密钥。我想要整个对象。基于密钥获取对象的唯一NSArray
对象被分类为PFObject
s,因此它们符合KVC,我希望它们在objectId
键上过滤。
在一个类别将这个上的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你给的值真的很想(在这种情况下,你得到第一个)
如果你在你的问题中提供了更多的细节,这将有助于你的数组中的对象是什么以及过滤应该在什么值上完成。 – rmaddy
我添加了一些更多的信息,但它是一个非常通用的问题,可以应用于任何KVO对象的任何键。 – doman412
它不是通用的。您的需求非常具体。如果具有许多不同值的两个不同对象碰巧具有相同的“键”,结果应该如何?你想要哪个物件? – rmaddy