Как я могу отфильтровать NSMutableArray в качестве примера? - PullRequest
0 голосов
/ 02 марта 2012

У меня есть NSMutableArray в качестве исходного массива, и я хочу отфильтровать его по паре значений ключей, но только по определенной паре значений ключей, как показано в примере.

Я не хочу использовать циклическую логику. Есть ли другой способ получить требуемый результат? Я не хочу изменять мой исходный массив.

original array{
                "name" = "name";
                "end_date" = "test end date";
                "id" = 104;
                "start_date" = "test start date";
                "user_id" = 5;
              },
              {
                 "name" = "name1";
                "end_date" = "test1 end date";
                "id" = 105;
                "start_date" = "test1 start date";
                "user_id" = 5;
            }


want filtered array as
{
        "name" = "name";
        "end_date" = "test end date";
        "start_date" = "test start date";

}
}
         "name" = "name";
        "end_date" = "test end date";
        "start_date" = "test start date";
}

Как я могу добиться этого без использования цикла for?

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Вы можете использовать enumerateObjectsUsingBlock, используя что-то вроде этого (я не перечислял все ключи из NSDictionary:

    NSMutablArray *myNewArray = [NSMutableArray array];
   [myArray enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL *stop) {
            NSDictionary *myNewDict = [NSDictionary dictionaryWithObjectsAndKeys:[obj valueForKey:@"name"],@"name"]];
            [myNewArray addObject:myNewDict];
   }];

Если вы хотели просто подмножество элементов, вы могли бы использовать NSPredicate.

0 голосов
/ 02 марта 2012

Являются ли словари изменчивыми?И вы хотите изменить исходный массив на месте или создать новый массив?

Самое простое решение, если ваша настройка позволяет это:

[array enumerateObjectsUsingBlock:
         ^(id obj, NSUinteger idx, BOOL *stop)
         {
              [obj removeObjectsForKeys:
                  [NSArray arrayWithObjects:
                       @"id", @"userid", nil]
              ];
         }
];

Хотя решение для цикла будет выглядетьпочти идентичны.

С точки зрения KVC вы можете использовать valueForKey: для извлечения отдельных массивов из каждого поля, которое вы хотите сохранить без явного цикла, но я не могу придумать быстрого способа интеграции этихтри массива чисто в один массив из трехступенчатых словарей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...