113 votes

Quand est-il préférable d’utiliser un NSSet plutôt qu’un NSArray

J’ai utilisé NSSets plusieurs fois dans mes applications, mais n’avez jamais créé un moi-même.

Ma question est :

Quand est-il préférable d’utiliser un NSSet comme apposées à un NSArray ? et pourquoi ?

182voto

James Webster Points 16663

L'image de la Documentation d'Apple décrit très bien:

Objective-C Collections

Array est un commandés (ordre est maintenu lorsque vous ajoutez des) séquence d'éléments

[array addObject:@1];
[array addObject:@2];
[array addObject:@3];
[array addObject:@4];
[array addObject:@6];
[array addObject:@4];
[array addObject:@1];
[array addObject:@2];

[1, 2, 3, 4, 6, 4, 1, 2]

Set est un distinct (pas de doublons), non triées de la liste des éléments

[set addObject:@1];
[set addObject:@2];
[set addObject:@3];
[set addObject:@4];
[set addObject:@6];
[set addObject:@4];
[set addObject:@1];
[set addObject:@2];

[1, 2, 6, 4, 3]

174voto

Ole Begemann Points 85798

Lorsque l’ordre des éléments dans la collection n’est pas important, ensembles offrent de meilleures performances pour trouver des objets dans la collection.

La raison est qu’une valeurs de hachage utilise ensemble pour trouver des objets (comme dans un dictionnaire) tout en un tableau doit parcourir tout son contenu pour trouver un objet particulier.

67voto

woz Points 7765

La meilleure réponse est c'est Apple propre documentation.

enter image description here

La principale différence est que, NSArray est une collection ordonnée et NSSet est une collection non ordonnée.

Il y a plusieurs articles qui parlent de la différence de vitesse entre les deux, à l'instar de ce un. Si vous êtes une itération à travers une collection non ordonnée, NSSet est grande. Cependant, dans de nombreux cas, vous avez besoin de faire des choses que seul un NSArray pouvez le faire, de sorte que vous sacrifier la vitesse pour ces capacités.

NSSet

  • Principalement les éléments d'accès par comparaison
  • Non ordonnée
  • Ne pas autoriser les doublons

NSArray

  • Peut accéder aux éléments par index
  • Commandé
  • Permet de doublons

C'est tout ce qu'il est vraiment de! Laissez-moi savoir si cela aide.

12voto

Jason Points 924

NSOrderedSet est disponible dans l’iOS 5 + ainsi que la principale différence devient si vous voulez des objets dupliqués dans la structure de données.

7voto

Sulthan Points 23360

Un tableau est utilisé pour accéder aux éléments par leur index. Tout élément qui peut être inséré dans le tableau de multiples reprises. Les tableaux mantain l'ordre de leurs éléments.

Un ensemble est utilisé essentiellement pour vérifier si l'élément est dans la collection ou pas. Les objets n'ont pas de notion d'ordre ou de l'indexation. Vous ne pouvez pas avoir un élément dans un ensemble à deux reprises.

Si un tableau veut vérifier s'il contient un élément, il doit vérifier tous ses éléments. Les ensembles sont conçus pour utiliser des algorithmes plus rapides.

Vous pouvez imaginer un jeu comme un dictionnaire sans valeurs.

Remarque ce tableau et ne sont pas les seules structures de données. Il y a d'autres, par exemple, File, Pile, Tas, Tas de Fibonacci. Je vous recommande de lire un livre sur les algorithmes et structures de données.

Consultez wikipedia pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X