52 votes

NSMutableArray ajoute un objet avec la commande

J'ai un NSMUtableArray qui a des éléments, par exemple:

a, b, c, e

Et je veux ajouter un objet d derrière c et avant e . En d'autres termes, j'aimerais insérer un objet dans un tableau trié (cet objet peut également être un objet personnalisé).

J'aimerais savoir: en plus d'utiliser for pour trouver le poste, existe-t-il une autre méthode pour l'implémenter? Il est préférable d'utiliser l'api iOS.

Merci.

113voto

Bavarious Points 43993

Vous pouvez utiliser -[NSArray indexOfObject:inSortedRange:options:usingComparator:] demander un NSArray pour l'index lorsqu'un objet doit être inséré donné un tableau qui est triée.

Par exemple, en supposant que le tableau est trié::

NSMutableArray *array = …;
id newObject = …;
NSComparator comparator = …;

NSUInteger newIndex = [array indexOfObject:newObject
                             inSortedRange:(NSRange){0, [array count]}
                                   options:NSBinarySearchingInsertionIndex
                           usingComparator:comparator];

[array insertObject:newObject atIndex:newIndex];

Puisque cette méthode utilise les binaires de recherche, il est plus efficace que de parcourir tous les éléments du tableau.

Le comparateur est un bloc de l'objet qui reçoit deux objets de type id et renvoie un NSComparisonResult de la valeur.

3voto

Marek Sebera Points 15987

Pour injecter de l'élément d'indice connu (position) utilisation

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html

Et pour trouver la position de l'objet placé au préalable dans NSMutableArray utilisation

- (int)indexOfObject:(id)anObject

NSMutableArray - Obtenir Des Tableaux Index Entier Par La Recherche, Avec Une Chaîne

La Section de Trouver des Objets dans un Tableau
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html

3voto

NSResponder Points 14459

J'ajouterais simplement le nouvel objet à chaque extrémité et trierais à nouveau le tableau. Si le tableau auquel vous ajoutez est déjà trié, la nouvelle tri qui déplace un objet sera aussi rapide que tout ce que vous implémenteriez vous-même.

 NSMutableArray *things; // populated 
id newObject;
...
[things addObject:newObject atIndex:0];
[things sortUsingSelector:@selector(compare:)];
 

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