根据键获取对象的唯一NSArray

时间:2014-05-08 19:17:18

标签: ios objective-c cocoa-touch nsarray key-value-coding

我有NSArray个自定义对象,并希望将该数组过滤为特定键上的唯一。我在搜索答案时看到的大部分内容都涉及使用valueForKey:valueForKeyPath:@distinctUnionOfObjects,但这些会返回该键的值数组。我想要整个对象。

对象是Parse的子类PFObject,所以它们符合KVC,我希望它们在objectId键上过滤。

1 个答案:

答案 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有任何贡献(在这种情况下你得到第一个)