使用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)。