32 votes

NSArray de NSSet - Dois-je le trier moi-même?

J'ai des données dans un NSSet et je dois les obtenir dans un NSArray.

Dois-je le trier moi-même (encore une fois, cela vient de Core Data) ou puis-je le sortir dans un ordre trié?

77voto

Ian Henry Points 9239

Vous pouvez spécifier un tri lorsque vous récupérez des données avec un NSFetchRequest par réglage de l' sortDescriptors de la propriété à un tableau d' NSSortDescriptors. Mais si vous l'avez déjà dans un NSSet et ne veux pas faire une autre demande de récupération, vous pouvez utiliser:

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];

Il va créer un intérimaire NSArray lorsque vous appelez allObjects , puis un autre tableau trié par la suite, il n'est donc pas efficace à 100%, mais les frais généraux doivent être négligeable pour la taille raisonnable des ensembles de données (et certainement moins que le coût de tri).

Modifier

En fait, j'ai eu tort - NSSet a l' sortedArrayUsingDescriptors: méthode de trop. Ainsi, vous pouvez simplement appeler [theSet sortedArrayUsingDescriptors:descriptors] de tout faire en une seule fois.

8voto

blindJesse Points 2059

Vous devez trier vous-même, mais ce n'est pas très difficile ...

 NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sprocket" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortVariable" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];   
[request setSortDescriptors:sortDescriptors];

NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];    
self.sprocketArray = mutableFetchResults;

[sortDescriptors release];
[sortDescriptor release];
[mutableFetchResults release];
[request release];
 

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