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
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.)
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
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
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
- 1. Prévention des chaînes en double dans C#
- 2. soumissions double Prévention forme
- 3. Modèle d'événement JQuery et prévention des gestionnaires en double
- 4. Recherche d'entrées en double dans une table
- 5. Supprimer des enregistrements en double dans une table
- 6. Comment supprimer les enregistrements en double dans une table?
- 7. trouver l'insertion en double dans une autre table
- 8. prévention XSS en PHP
- 9. Insérer dans une table en utilisant une vue
- 10. Comment afficher une vue de table dans une autre vue de table
- 11. Comment supprimer des valeurs en double pour un champ dans une table avec une seule requête?
- 12. Prévention des problèmes de boîtier dans Subversion
- 13. Génération de réponses en double dans une requête MySQL SELECT
- 14. Prévention des erreurs de conversion
- 15. Prévention des guillemets causant une exception HttpRequestValidationException
- 16. Prévention Nhibernate de persister une collection spécifique dans une classe
- 17. Prévention du double-clic avec la validation côté serveur
- 18. une vue de table à partir de la vue modale
- 19. Impossible de lier des données à une vue de table
- 20. Comment insérer une vue dans une cellule de table existante?
- 21. supprimer l'enregistrement en double de la même table dans mysql
- 22. Remplir une vue de table avec des noms de fichiers
- 23. Prévention des conflits jQuery click()
- 24. Contraintes de domaine en double dans la table
- 25. iphone; quand libérer une vue lorsque plusieurs copies en sont dérivées?
- 26. Échangez des ressources iphone dans des copies de travail SVN
- 27. Prévention des en-têtes d'une table d'être sortable en utilisant JQuery Sortable plug-in
- 28. UDF de table en ligne vs une vue - Lequel utiliser?
- 29. Utilisation d'une table temporaire dans une vue
- 30. Pourquoi appuyer sur une touche en double lors de l'ajout à une table dans Lua?
Mais comment trouver des doublons dans un ensemble? Une boucle est-elle utilisée en interne? –
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
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? –