J'ai un NSDictionary qui a été analysé dans un tableau dont l'un des éléments est la date. J'ai essayé d'utiliser [startimeArray sortUsingSelector:@selector(compare:)];
(starttimeArray), c'est ma date, mais elle ne fait qu'agrandir. Comment puis-je trier par ordre décroissant. Merci
Triez le tableau en mettantNOest un paramètre croissant:
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
Vous pouvez utiliser un bloc comparateur
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
return [d1 compare:d2];
}];
pour inverser l'ordre, il suffit d'échanger les dates
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
return [d2 compare:d1];
}];
ou - comme compare:
renvoie un NSComparisonResult, qui est en fait typé en entier voir ci-dessous - il suffit de multiplier par -1
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
return -1* [d1 compare:d2];
}];
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
J'utiliserais la méthode reverseObjectEnumerator
intégrée de NSArray
startimeArray = [startimeArray sortUsingSelector:@selector(compare:)];
startimeArray = [[startimeArray reverseObjectEnumerator] allObjects];
C'est utile lorsque vous avez besoin que le tableau soit trié par ordre croissant et décroissant, afin de pouvoir facilement revenir au tri précédent.
Swift 3.0
Pour ceux qui utilisent Swift 3.0, ce DateHelper vous évitera des maux de tête.
filteredLogs.sort(by: {
let firstElement = $0.timeStamp! as Date
let secondElement = $1.timeStamp! as Date
return firstElement.compare(.isEarlier(than: secondElement))
})
Le code ci-dessus est un extrait de l'un de mes projets. Il utilise la classe d'assistance pour trier mes journaux avec les dates les plus récentes à gauche du tableau. Le signe $ est un paramètre de position
Il y a la solution Swift pour la solution vérifiée:
let sortedArray = randomArray.sortedArrayUsingComparator { (d1, d2) -> NSComparisonResult in
return (d1 as! NSDate).compare(d2 as! NSDate)
}
Dans la classe où les éléments de tableau sont en cours d'initialisation.
-(NSComparisonResult) compareArray: (id) element {
Return [ArrayElement compare: [element ArrayElement]];
}
-(NSComparisonResult) compareArrayReverse: (id) element {
Return [[element ArrayElement] compare: ArrayElement];
}
Puis dans la classe où votre startimeArray est initialisé:
@synthesize ArrayName;
-(void) sort: (BOOL) sel {
if (sel) {
[ArrayName sortUsingSelector: @selector(compareArray:)];
} else {
[ArrayName sortUsingSelector: @selector(compareArrayReverse:)];
}
}
Puis dans la main ():
// Sort the array. sort = TRUE - ascending order, sort = FALSE - descending order.
[startimeArray sort: FALSE];