Objective c NSDictionary的NSArray的筛选器和NSDictionary';s

Objective c NSDictionary的NSArray的筛选器和NSDictionary';s,objective-c,nsarray,nsdictionary,Objective C,Nsarray,Nsdictionary,我有一本词典,里面有大约150个锅炉制造商的索引。每个键的值都是NSDictionary的NSArray。每个NSDictionary表示一个具有某些属性的锅炉: NSDictionary boilerData = { @"Alpha" = [{name: Boiler1, rating: 80}, {name:Boiler2, rating: 90}], @"Beta" = [{name: Boiler3, rating: 80}, {name:Boiler4, ratin

我有一本词典,里面有大约150个锅炉制造商的索引。每个键的值都是NSDictionary的NSArray。每个NSDictionary表示一个具有某些属性的锅炉:

NSDictionary boilerData =
{
     @"Alpha" = [{name: Boiler1, rating: 80}, {name:Boiler2, rating: 90}],
     @"Beta" = [{name: Boiler3, rating: 80}, {name:Boiler4, rating: 91}, {name:Boiler5, rating: 78}],
     ...
}

我想能够过滤,以便我可以得到所有锅炉的评级为80。我知道我需要一个NSPredicate,但我不知道如何构建它?我发现的其他文章似乎都不符合这一要求。

更简单的方法是
NSArray*filteredArray=[[boilerData valueForKeyPath:@“allValues@Unionofarray”]filteredArray使用谓词:谓词]
@Chuck谢谢你的代码。我已经将其合并到解决方案中,但是我必须执行[[boilerData allValues]valueForKeyPath:@“@unionofArray@self”];让它工作。我不知道为什么[boilerData valueForKeyPath:@“allValues.@UnionOfArray.@self”];被窃听。@markpirvine:D'oh,它不像我写的那样工作,因为NSDictionary处理
valueForKey:
-它是
objectForKey:
的垫片。我真傻,竟然忘了这件事。@Chuck,真可惜!这将是一种非常好的方法,可以用字典来消化层次结构。
NSDictionary *boilerData =
@{
  @"Alpha" : @[@{@"name": @"Boiler1", @"rating": @80}, @{@"name": @"Boiler2", @"rating": @90}],
  @"Beta" : @[@{@"name": @"Boiler3", @"rating": @98}, @{@"name": @"Boiler4", @"rating": @80}, @{@"name": @"Boiler5", @"rating": @90}]
  };

NSMutableArray *filteredArray = [[NSMutableArray alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"rating = 80"];
for (NSArray *array in [boilerData allValues]) {
    [filteredArray addObjectsFromArray:[array filteredArrayUsingPredicate:predicate]];
}
NSLog(@"all boilers with rating = 80 : %@", filteredArray);