J'ai pensé poser une question que je décris comme une "pierre de Rosette". En d'autres termes, je pose une question et j'aimerais que des réponses soient données pour un certain nombre de langues différentes afin que quelqu'un qui passe d'une langue à l'autre puisse voir comment certaines opérations typiques sont effectuées. J'ai toujours trouvé que ces types de comparaisons étaient très éducatifs lorsqu'on passe à une nouvelle langue, et qu'il s'agissait d'un moyen rapide et amusant de voir les différences entre les langues sans avoir à les utiliser intensivement pendant un certain temps.
Cette question particulière est la suivante : étant donné un ensemble d'éléments dans la collection typique appropriée à la langue en question, comment les trier ? Un exemple de code accompagné d'une description serait bienvenu.
Je vais présenter la réponse en Objective C :
// Can only modify mutable arrays
NSMutableArray *sortArray = [NSMutableArray arrayWithArray:myArrayOfStuff];
Trier NSString ignorer cas :
[sortArray sortUsingSelector: @selector(caseInsensitiveCompare:)];
Trie la plupart des objets de base (fonctionnerait également pour NSString), en supposant que les nombres sont enveloppés dans la classe NSNumber :
[sortArray sortUsingSelector:@selector(compare:)];
Trier les instances de vos propres classes :
[sortArray sortUsingSelector:@selector(myCompare:)];
Pour le dernier point, dans votre classe, vous implémentez une méthode de comparaison comme suit :
// Class instance method to compare self with object "obj"
- (NSComparisonResult) myCompare:(myObject *)obj
{
NSComparisonResult retVal = NSOrderedSame;
if ( self < obj ) // by whatever rules make sense for your class of course
retVal = NSOrderedAscending;
else if ( self > obj )
retVal = NSOrderedDescending;
return retVal;
}