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

时间:2014-04-11 09:55:19

标签: ios objective-c nsarray nsdictionary 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 )

2 个答案:

答案 0 :(得分:0)

您不需要谓词,因为您实际上并未进行过滤,您只需要:

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

答案 1 :(得分:0)

您不想过滤,您想要折叠结果,因此使用谓词并不能满足您的目的。在普通的Cocoa中,您可以这样做:

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

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