猿问

使用NSPredicate根据NSDictionary键过滤NSArray

我有很多字典。


我想根据一个键过滤数组。


我尝试了这个:


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT ==  %@)", @"Football"];


NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];

这行不通,我没有结果。我想我做错了。我知道如果“ SPORT”是ivar,这就是方法。我认为如果是密钥,可能会有所不同。


我还没有找到一个例子。


谢谢


更新资料


我在要搜索的字符串周围加了引号。


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT ==  '%@')", @"Football"];

它仍然不起作用。


更新2


解决了。实际上,我不得不删除单引号,这似乎与指南中所说的背道而驰。


我的真正问题是我有一个嵌套数组,而我实际上并没有评估字典。骨头移动。


繁花不似锦
浏览 550回答 3
3回答

肥皂起泡泡

它应该工作-只要数据变量实际上是一个包含带有键SPORT的字典的数组NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"foo" forKey:@"BAR"]];    NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(BAR == %@)", @"foo"]];在这种情况下过滤包含字典。

摇曳的蔷薇

#import <Foundation/Foundation.h>// clang -framework Foundation Siegfried.m&nbsp;&nbsp; &nbsp; intmain() {&nbsp; &nbsp; NSArray *arr = @[&nbsp; &nbsp; &nbsp; &nbsp; @{@"1" : @"Fafner"},&nbsp; &nbsp; &nbsp; &nbsp; @{@"1" : @"Fasolt"}&nbsp; &nbsp; ];&nbsp; &nbsp; NSPredicate *p = [NSPredicate predicateWithFormat:&nbsp; &nbsp; &nbsp; &nbsp; @"SELF['1'] CONTAINS 'e'"];&nbsp; &nbsp; NSArray *res = [arr filteredArrayUsingPredicate:p];&nbsp; &nbsp; NSLog(@"Siegfried %@", res);&nbsp; &nbsp; return 0;}
随时随地看视频慕课网APP
我要回答