Question

J'ai un NSMutableArray avec le contenu que je veux remplacer par des objets NSNull.

Voici ce que je fais:

NSMutableArray* nulls = [NSMutableArray array];

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

[stageMap replaceObjectsAtIndexes:myIndexes withObjects:nulls];

Comment puis-je faire plus efficacement? Est-il possible d'énumérer un NSIndexSet, donc je peux remplacer le contenu du tableau un par un?

Résolu

méthode suggérée se révèle être plus rapide 2x (moy 0.000565s vs 0.001210s):

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];
    }
}
Était-ce utile?

La solution

Vous pouvez utiliser une boucle de for. Commencez par le premier indice, utilisez indexGreaterThanIndex: pour obtenir l'index suivant, et l'arrêt après avoir frappé le dernier indice.

Ne pas oublier de tenir compte d'un ensemble d'indices vide. Le premier et dernier indice sera NSNotFound dans ce cas. La meilleure façon est de tester le nombre de l'ensemble d'indices; si elle est de zéro, ne boucle pas.

En outre, ce que Jason Coco a dit au sujet du profilage. Ne vous inquiétez pas trop sur l'efficacité jusqu'à ce que votre programme fonctionne, et ne vont pas optimiser les choses jusqu'à ce que vous avez exécuté Shark (ou instruments, si c'est votre truc) et a trouvé exactement ce qui est lent.

Autres conseils

Je sais que c'est une question très ancienne, mais je signale ici au cas où quelqu'un d'autre trouve cette question, vous pouvez utiliser:

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

Ce qui est beaucoup plus succinct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top