使用 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 仅从字典数组中获取特定键的值的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 过滤包含字典的数组数组

如何在嵌套字典数组上使用 NSpredicate

NSPredicate 对数组的数组

NSpredicate 结果

使用 NSPredicate 过滤数组的 NSDictionary

NSPredicate 上的字典数组 iOS