使用NSPredicate只能从字典数组中获取特定键的值

我不知道价值。 我只知道关键。

arrTripCat : ( { tripcategory = "general_tourism"; }, { tripcategory = nightlife; }, { tripcategory = "art_museums"; }, { tripcategory = nightlife; }, { tripcategory = architecture; }, { tripcategory = nightlife; } ); 

我试过的NSPredicate

 NSArray *arrTripCat = [NSArray arrayWithArray:[self.dictSearchResult objectForKey:@"TripCategories"]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF.@allKeys contains[cd] %@",@"tripcategory"]; NSMutableArray *filteredArray = [[NSMutableArray alloc] init]; [filteredArray addObjectsFromArray:[arrTripCat filteredArrayUsingPredicate:predicate]]; 

在此之后, filteredArray仍然具有与之前相同格式的所有数据。

 filteredArray: ( { tripcategory = "general_tourism"; }, { tripcategory = nightlife; }, { tripcategory = "art_museums"; }, { tripcategory = nightlife; }, { tripcategory = architecture; }, { tripcategory = nightlife; } ); 

我期望得到的最终结果是将tripcategory键的所有值放入数组中。 即

  ( general_tourism, nightlife, art_museums, architecture ) 

你不需要一个谓词,因为你实际上没有过滤,所有你需要的是:

 NSArray *tripCategories = [arrTripCat valueForKey:@"tripcategory"]; 

你不想过滤,你想折叠结果,所以使用谓词不符合你的目的。 在简单的cocoa,你可以做:

 NSMutableArray *results = @[].mutableCopy; for (NSDictionary *dict in arrTripCat) { [results addObject:dict[@"tripcategory"]; } 

这会给你(general_tourism,nightlife,art_museums,architecture)。