Hoe sorteer ik alfabetisch een aangepast objectveld binnen een NSMutable Array?

Ik heb een aangepast object zoals:

#import 

@interface Store : NSObject{
    NSString *name;
    NSString *address;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *address;

@end

Ik heb een array van NSMutableArray (storeArray) met Store-objecten:

store1 = [[Store alloc] init];
store1.name = @"Walmart";    
store1.address = @"walmart address here..";

store2 = [[Store alloc] init];
store2.name = @"Target";
store2.address = @"Target address here..";

store3 = [[Store alloc] init];
store3.name = @"Apple Store";
store3.address = @"Apple store address here..";

//add stores to array
storeArray = [[NSMutableArray alloc] init];
[storeArray addObject:store1];
[storeArray addObject:store2];
[storeArray addObject:store3];

Mijn vraag is hoe ik de array kan sorteren op de winkelnaam? Ik weet dat ik alfabetisch een array kan sorteren met behulp van deze regel:

[nameOfArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

Hoe kan ik dit toepassen op de winkelnaam van mijn winkelklasse?

7

2 antwoord

NSSortDescriptor *sortDescriptor =
    [NSSortDescriptor sortDescriptorWithKey:@"name"
                                  ascending:YES
                                   selector:@selector(caseInsensitiveCompare:)];
[nameOfArray sortedArrayUsingDescriptors:@[sortDescriptor]];

Gerelateerde documentatie:

27
toegevoegd

Regexident's answer is based on NSArrays, the corresponding in-place sorting for NSMutableArray would be -sortUsingDescriptors:

[storeArray sortUsingDescriptors:
                    [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" 
                                                                           ascending:YES 
                                                                            selector:@selector(caseInsensitiveCompare:)]]];

Nu wordt storeArray it-self gesorteerd.

11
toegevoegd
wat bedoel je? De ene is voor in-situ sorteren, de een maakt een nieuwe array. Beide versies hebben hun eigen gebruik.
toegevoegd de auteur vikingosegundo, de bron
Heel erg bedankt ... de meeste antwoorden laten zien hoe u NSArrays sorteert, ook al wordt er om de array NSMutableArray gevraagd. Dit werkte als een charme :)
toegevoegd de auteur Vidhi, de bron
Bedankt man. Het is raar dat ze 2 methoden hebben met verschillende resultaten
toegevoegd de auteur Lonkly, de bron