Замена содержимого нескольких массивов одним объектом? - PullRequest
1 голос
/ 12 апреля 2009

У меня есть NSMutableArray с содержимым, которое я хочу заменить NSNull объектами.

Вот что я делаю:

NSMutableArray* nulls = [NSMutableArray array];

for (NSInteger i = 0; i < myIndexes.count; i++)
    [nulls addObject:[NSNull null]];

[stageMap replaceObjectsAtIndexes:myIndexes withObjects:nulls];

Как я могу сделать это более эффективно? Есть ли способ перечислить NSIndexSet, чтобы я мог заменить содержимое массива один за другим?

решаемые

Предлагаемый метод оказывается в 2 раза быстрее (в среднем 0,000565 с против 0,001210 с):

if (myIndex.count > 0)
{
    NSInteger index = [myIndex firstIndex];

    for (NSInteger i = 0; i < myIndex.count; i++)
    {
        [stageMap replaceObjectAtIndex:index withObject:[NSNull null]];
        index = [myIndex indexGreaterThanIndex:index];
    }
}

Ответы [ 2 ]

1 голос
/ 12 апреля 2009

Вы можете использовать цикл for. Начните с первого индекса, используйте indexGreaterThanIndex:, чтобы получить следующий индекс, и остановитесь после нажатия на последний индекс.

Не забудьте учесть пустой набор индексов. В этом случае как первый, так и последний индекс будут NSNotFound. Самый простой способ - проверить счетчик набора индексов; если это ноль, не зацикливайтесь.

Кроме того, что сказал Джейсон Коко о профилировании. Не беспокойтесь слишком сильно об эффективности, пока ваша программа не заработает, и не переходите к оптимизации, пока вы не запустите Shark (или Instruments, если это ваша вещь) и не найдете точно, что медленно.

0 голосов
/ 04 июля 2012

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

    [indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
        NSLog(@"index: %d", idx);
        [objectArray replaceObjectAtIndex:idx 
                               withObject:newObject];
    }];

Что намного лаконичнее.

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