2010-09-30 4 views
2

J'ai un NSMutableArray que j'affiche via une vue de table. Le problème est que lorsque j'ajoute des objets à ce tableau, je ne veux pas avoir de doublons. Si je crée un NSMutableSet à partir de NSMutableArray, puis ajoutez des objets à NSMutableSet, puis le convertissez en NSMutableArray, est-ce plus efficace que de vérifier NSMutableArray dans une boucle pour les doublons avant d'ajouter un élément?Prévention des copies en double dans une vue de table

Répondre

4

Généralement oui, il serait plus efficace d'utiliser un ensemble. La construction d'un ensemble de n éléments est O(n log n). Trouver tous les doublons dans un tableau en bouclant juste à travers sera O(n^2). (Si vous vous vraiment déterminé pourriez obtenir O (n log n), mais il faudrait réécrire un peu ce que fait déjà défini.)

+0

Mais comment trouver des doublons dans un ensemble? Une boucle est-elle utilisée en interne? –

+0

Les ensembles sont représentés en interne sous la forme d'arbres de recherche binaires. Pour ajouter un élément, il trouve l'endroit approprié en traversant l'arbre (opération O (log n)). S'il existe déjà, rien n'est inséré (aucun objet créé), sinon il l'insère. – JoshD

+0

Ma source de données d'origine n'est cependant pas un ensemble. C'est un tableau parce qu'il est affiché dans une vue de tableau. Il y aura une surcharge dans la conversion du tableau en ensemble avant l'insertion. Ensuite, l'ensemble doit être reconverti en un tableau pour l'affichage. Est-ce encore efficace? –

1

vous pouvez vérifier si l'objet de votre ajouter existe en utilisant

- (NSUInteger)indexOfObject:(id)anObject 

si l'objet existe dans le tableau il vous donnera un indice sinon il retourne

NSNotFound 

afin que vous puissiez faire une si avant d'ajouter des éléments à votre tableau.

Je pense que c'est un peu mieux dans la mémoire sage parce que vous ne créez pas aux objets.

Espérons que cela aide

+0

Cela finirait par être O (n^2) pour créer le tableau de n éléments. C'est une option, mais ce n'est pas beaucoup plus efficace que de boucler à travers le tableau. – JoshD

+0

oui je suis d'accord que faire un ensemble est plus efficace mais, il a besoin d'un NSMutableArray en conséquence et en créant un ensemble puis en en créant un NSMutableArray, consomme plus de mémoire car il faut faire des objets. – mklfarha

Questions connexes