Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 基于密钥获取对象的唯一NSArray_Ios_Objective C_Cocoa Touch_Nsarray_Key Value Coding - Fatal编程技术网

Ios 基于密钥获取对象的唯一NSArray

Ios 基于密钥获取对象的唯一NSArray,ios,objective-c,cocoa-touch,nsarray,key-value-coding,Ios,Objective C,Cocoa Touch,Nsarray,Key Value Coding,我有一个自定义对象的NSArray,并希望过滤该数组,使其在特定键上唯一。我在搜索答案时看到的大多数情况都涉及使用valueForKey:、valueForKeyPath:或@distinctUnionOfObjects,但这些都返回该键的值数组。我想要整个物体 这些对象是Parse中的子类PFObjects,因此它们符合KVC,我希望它们在objectId键上进行过滤。将其放入NSArray的一个类别中: -(NSArray*)arrayFilteredForUniqueValuesOfKey

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


这些对象是Parse中的子类
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个对象中哪一个具有你真正想要的关键路径的给定值(在这种情况下,你得到了第一个)

如果您在问题中提供更多关于数组中的对象以及应在哪些值上执行过滤的详细信息,这会有所帮助。我添加了更多信息,但这是一个非常通用的问题,可以应用于任何KVO对象的任何键。它根本不是通用的。你的需求非常具体。如果两个具有许多不同值的不同对象恰好具有相同的“键”,结果会是什么?你想要哪个对象?不幸的是,没有任何内置的东西可以做到这一点。