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