我有一系列字典.
我想基于密钥过滤数组.
我试过这个:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"]; NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
这不起作用,我没有结果.我想我做错了什么.我知道如果"SPORT"是一个ivar,这就是方法.我认为如果它是关键的话可能会有所不同.
然而,我无法找到一个例子.
谢谢
更新
我在我正在搜索的字符串周围添加了引号.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
它仍然无法正常工作.
更新2
解决了它.我实际上不得不删除单引号,这似乎与指南所说的相反.
我真正的问题是我有一个嵌套数组,我实际上并没有评估字典.骨头移动.
它应该工作 - 只要数据变量实际上是一个包含关键字SPORT的字典的数组
NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"foo" forKey:@"BAR"]]; NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(BAR == %@)", @"foo"]];
在这种情况下过滤包含字典.
(%@不必引用,这是在NSPredicate创建对象时完成的.)
我知道这是旧闻,但加上我的两分钱.默认情况下,我使用命令LIKE[cd]
而不仅仅是[c]
.在[d]
比较了重音符号的字母.这在我的魔兽应用程序中特别有效,人们将其名称拼写为"Vòódòó",因此几乎不可能在桌面视图中搜索他们的名字.该[d]
谓词中去掉他们的口音符号.所以的谓词@"name LIKE[CD] %@", object.name
,其中object.name == @"voodoo"
将返回包含名巫毒的对象.
从Apple文档:像[cd]表示"case-和diacritic-insensitive like".)有关字符串语法的完整描述和所有可用运算符的列表,请参阅谓词格式字符串语法.
#import// 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; }