Как отфильтровать словарь массивов - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть словарь массивов, которые я хочу отфильтровать на основе элемента в массивах.Мой словарь выглядит следующим образом ...

"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-го элемента, например, всех ключей, которые третий элемент (идентификатор часового пояса) является "Америка/ Adak».

Я думаю, что могу сделать это с keysOfEntriesPassingTest, но я не знаю, как это сделать.Я нашел пример кода ...

mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
             if( [[obj port] isEqual: [NSNumber numberWithInt: 8080]]) {
                 return YES;
             else
                 return NO;
             }]

Но я не могу понять, как переписать это, чтобы работать в моем случае.Я не понимаю, синтаксис требуется.

Может кто-нибудь помочь мне разобраться, как реализовать этот фильтр?

Спасибо, Джон

Ответы [ 2 ]

6 голосов
/ 10 февраля 2011
    mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
                 if ([[obj objectAtIndex:2] isEqualToString:@"America/Adak"]) {
                     return YES;
                 } else {
                     return NO;
                 } 
                }];

Обратите внимание, что, как следует из названия метода, результирующий набор будет содержать только ключи, а не сами массивы.

0 голосов
/ 10 февраля 2011

Ole, Спасибо! !!

Оператор if в примере кода, который я нашел, был отформатирован неправильно.Я думаю, что вы пересмотрели только соответствующую часть для меня.Для того, чтобы другие заинтересовались этим вопросом, вот окончательный рабочий код ...

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

             }else {
                 return NO;
             }
         }];
...