为了账号安全,请及时绑定邮箱和手机立即绑定

使用NSPredicate根据NSDictionary键过滤NSArray

使用NSPredicate根据NSDictionary键过滤NSArray

繁花不似锦 2019-11-08 10:55:44
我有很多字典。我想根据一个键过滤数组。我尝试了这个:NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT ==  %@)", @"Football"];NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];这行不通,我没有结果。我想我做错了。我知道如果“ SPORT”是ivar,这就是方法。我认为如果是密钥,可能会有所不同。我还没有找到一个例子。谢谢更新资料我在要搜索的字符串周围加了引号。NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT ==  '%@')", @"Football"];它仍然不起作用。更新2解决了。实际上,我不得不删除单引号,这似乎与指南中所说的背道而驰。我的真正问题是我有一个嵌套数组,而我实际上并没有评估字典。骨头移动。
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

它应该工作-只要数据变量实际上是一个包含带有键SPORT的字典的数组


NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"foo" forKey:@"BAR"]];    

NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(BAR == %@)", @"foo"]];

在这种情况下过滤包含字典。


查看完整回答
反对 回复 2019-11-08
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

#import <Foundation/Foundation.h>

// clang -framework Foundation Siegfried.m 

    int

main() {

    NSArray *arr = @[

        @{@"1" : @"Fafner"},

        @{@"1" : @"Fasolt"}

    ];

    NSPredicate *p = [NSPredicate predicateWithFormat:

        @"SELF['1'] CONTAINS 'e'"];

    NSArray *res = [arr filteredArrayUsingPredicate:p];

    NSLog(@"Siegfried %@", res);

    return 0;

}


查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 549 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信