NSDiction的NSArray - 按字典值过滤并返回唯一的数组对象

时间:2013-06-28 00:52:50

标签: objective-c nsarray nsdictionary

假设我有一个NSArray填充了数百个NSDictionary个对象。

所有字典对象都有一个键name的值,但这些值名称在不同的对象中可能会出现多次。

我需要能够过滤这个NSArray,只返回每个唯一name属性的一个对象(无论是第一个还是最后一个,我都不在乎)。

这是我有多远,但显然我的filtered数组包含所有对象而不是唯一的对象。

我认为必须有一种方法可以告诉谓词将结果限制为只有一个/第一个匹配?

NSArray *allObjects = ... // This is my array of NSDictionaries                                                                                              
NSArray *uniqueNames = [allObjects valueForKeyPath:@"@distinctUnionOfObjects.name"];
NSArray *filtered = [allObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.name IN %@)", uniqueNames]];

谢谢!

1 个答案:

答案 0 :(得分:5)

NSMutableDictionary *uniqueObjects = [NSMutableDictionary dictionaryWithCapacity:allObjects.count];
for (NSDictionary *object in allObjects) {
    [uniqueObjects setObject:object forKey:object[@"name"]];
}