iphone - его тихо путают с использованием блоков для получения подмассива из массива - PullRequest
0 голосов
/ 09 марта 2011

У меня есть массив объектов (объектов json), каждый объект имеет следующую природу:

{
        author = "<null>";
        category =         {
            "created_at" = "2011-02-06T18:11:39Z";
            id = 4;
            name = lawyers;
        };
        "created_at" = "<null>";
        id = 693;
        "mobile_user_id" = "<null>";
        "rating_count" = 0;
        status = 1;
        text = "A brain walks into a bar and says, \"I'll have a pint of beer please. \"The barman looks at him and says \"Sorry, I can't serve you.\" \"Why not?\" asks the brain. \"You're already out of your head.\"";
        title = "A brain goes to a local bar";
    }

Из этого массива объектов я хочу найти объекты, чья категория имеет id = 4, и сделатьподмассив.

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

1 Ответ

2 голосов
/ 09 марта 2011

Полагаю, под "использованием блоков" вы подразумеваете использование метода NSArray, подобного

- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

Тогда это будет выглядеть

NSIndexSet *indexes = [yourArray indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return (BOOL)([[obj valueForKeyPath:@"category.id"] intValue] == 4);
}];
NSArray *filteredArray = [yourArray objectsAtIndexes:indexes];

Это то, что вы спросили, но я бы предпочел использовать filteredArrayUsingPredicate: так:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"category.id = %@", [NSNumber numberWithInt:4]];
NSArray *filteredArray = [yourArray filteredArrayUsingPredicate:pred];
...