2014-05-08 32 views
2

我有一個NSArray自定義對象,並且想要過濾該數組以在特定鍵上唯一。我在搜索答案時看到的大部分內容涉及到使用valueForKey:,valueForKeyPath:@distinctUnionOfObjects,但那些返回數組的值爲該密鑰。我想要整個對象。基於密鑰獲取對象的唯一NSArray

對象被分類爲PFObject s,因此它們符合KVC,我希望它們在objectId鍵上過濾。

+0

如果你在你的問題中提供了更多的細節,這將有助於你的數組中的對象是什麼以及過濾應該在什麼值上完成。 – rmaddy

+0

我添加了一些更多的信息,但它是一個非常通用的問題,可以應用於任何KVO對象的任何鍵。 – doman412

+1

它不是通用的。您的需求非常具體。如果具有許多不同值的兩個不同對象碰巧具有相同的「鍵」,結果應該如何?你想要哪個物件? – rmaddy

回答

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你給的值真的很想(在這種情況下,你得到第一個)