使用 NSPredicate 仅从字典数组中获取特定键的值
Posted
技术标签:
【中文标题】使用 NSPredicate 仅从字典数组中获取特定键的值【英文标题】:Using NSPredicate get only values of a particular key from an array of dictionaries 【发布时间】:2014-04-11 09:55:18 【问题描述】:我不知道这些值。我只知道钥匙。
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 )
【问题讨论】:
【参考方案1】:您不需要谓词,因为您实际上并没有过滤,您只需要:
NSArray *tripCategories = [arrTripCat valueForKey:@"tripcategory"];
【讨论】:
【参考方案2】:您不想过滤,您想折叠结果,因此使用谓词不符合您的目的。在普通的 Cocoa 中,你可以这样做:
NSMutableArray *results = @[].mutableCopy;
for (NSDictionary *dict in arrTripCat)
[results addObject:dict[@"tripcategory"];
这将为您提供(general_tourism、nightlife、art_museums、architecture)。
【讨论】:
以上是关于使用 NSPredicate 仅从字典数组中获取特定键的值的主要内容,如果未能解决你的问题,请参考以下文章