如何过滤数组字典

时间:2011-02-10 00:10:41

标签: iphone xcode filter nsdictionary predicate

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

"Abu Dhabi, U.A.E." =     (
    "24.466665",
    "54.416668",
    "Asia/Dubai"
);
"Accra, Ghana" =     (
    "5.583333",
    "-0.100000",
    "Africa/Accra"
);
"Adak, America" =     (
    "",
    "",
    "America/Adak"
);
"Addis Ababa, Ethiopia" =     (
    "9.050000",
    "38.700001",
    "Africa/Addis_Ababa"
);

我想根据第3项过滤字典,例如第三项(时区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;
             }]

但我无法弄清楚如何在我的情况下重写这个。我不明白所需的语法。

有人可以帮我弄清楚如何实施这个过滤器吗?

谢谢,约翰

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

Ole,谢谢你!

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

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

             }else {
                 return NO;
             }
         }];