Iphone 如何筛选数组字典

Iphone 如何筛选数组字典,iphone,xcode,filter,nsdictionary,predicate,Iphone,Xcode,Filter,Nsdictionary,Predicate,我有一个数组字典,我想根据数组中的元素对其进行过滤。我的字典看起来像这样 我想根据第三项过滤字典,例如第三项(时区ID)为“America/Adak”的所有键 我想我可以用keysOfEntriesPassingTest来做这件事,但我不知道该怎么做。我发现了一些示例代码 mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) { if( [[obj port] isEqual: [N

我有一个数组字典,我想根据数组中的元素对其进行过滤。我的字典看起来像这样

我想根据第三项过滤字典,例如第三项(时区ID)为“America/Adak”的所有键

我想我可以用keysOfEntriesPassingTest来做这件事,但我不知道该怎么做。我发现了一些示例代码

mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
             if( [[obj port] isEqual: [NSNumber numberWithInt: 8080]]) {
                 return YES;
             else
                 return NO;
             }]
但我不知道如何重写它,以便在我的情况下工作。我不理解所需的语法

有人能帮我弄清楚如何实现这个过滤器吗

谢谢你,约翰

    mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
                 if ([[obj objectAtIndex:2] isEqualToString:@"America/Adak"]) {
                     return YES;
                 } else {
                     return NO;
                 } 
                }];
请注意,正如方法名称所示,结果集将只包含键,而不包含数组本身

请注意,正如方法名称所示,结果集只包含键,而不包含数组本身。

Ole,谢谢

我发现示例代码中的if语句格式不正确。我想你只为我修改了相关部分。为了让其他人看看这个问题,这里是最后的工作代码

mySet = [citiesDictionary keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) 
         {
             if([[obj objectAtIndex:2] isEqualToString:@"America/Adak"]){
                 return YES;

             }else {
                 return NO;
             }
         }];
奥立,谢谢你

我发现示例代码中的if语句格式不正确。我想你只为我修改了相关部分。为了让其他人看看这个问题,这里是最后的工作代码

mySet = [citiesDictionary keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) 
         {
             if([[obj objectAtIndex:2] isEqualToString:@"America/Adak"]){
                 return YES;

             }else {
                 return NO;
             }
         }];

再次感谢。你能帮我理解这个方法的语法吗。EntriesPassingTest的键是什么:^(id键,id对象,BOOL*stop)试图告诉我。Obj必须是存储的对象,但您将如何使用key以及BOOL*stop是什么?好的,我想我明白了。。。我可以使用key来测试key是否匹配,比如contains或start with。我认为在找到第一个匹配项时,可以使用stop停止过滤???不确定如何使用stop。方法
keysOfEntriesPassingTest:
将在字典中迭代,并为字典中存储的每个对象调用一次大括号中的代码块。在块中,您可以使用
获取当前值的
(例如在您的情况下,
@“Adak,America”
),
obj
是值本身,
stop
是告诉方法在某一点停止迭代的一种方式。所以,是的,它按照你的假设工作。对于块返回的每个对象
YES
,该方法将对象的密钥存储在它最终返回给您的集合中。再次感谢。你能帮我理解这个方法的语法吗。EntriesPassingTest的键是什么:^(id键,id对象,BOOL*stop)试图告诉我。Obj必须是存储的对象,但您将如何使用key以及BOOL*stop是什么?好的,我想我明白了。。。我可以使用key来测试key是否匹配,比如contains或start with。我认为在找到第一个匹配项时,可以使用stop停止过滤???不确定如何使用stop。方法
keysOfEntriesPassingTest:
将在字典中迭代,并为字典中存储的每个对象调用一次大括号中的代码块。在块中,您可以使用
获取当前值的
(例如在您的情况下,
@“Adak,America”
),
obj
是值本身,
stop
是告诉方法在某一点停止迭代的一种方式。所以,是的,它按照你的假设工作。对于块返回的每个对象
YES
,该方法将对象的键存储在它最终返回给您的集合中。