2009-09-14 6 views
4

J'essaie de trier une liste de valeurs CLLocationDistance par distance la plus proche (ordre croissant). J'ai d'abord converti les valeurs à NSString objets afin que je puisse utiliser le genre suivant:Tri d'un tableau de valeurs doubles ou CLLocationDistance sur l'iPhone

NSArray *sortedArray; 
sortedArray = [distances sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

NSString ne peut pas trier sur la valeur numérique.

Comment puis-je définir une liste de valeurs numériques dans l'ordre croissant?

Répondre

8

Je pense que ce que vous voulez est sortedArrayUsingFunction:context: en utilisant quelque chose comme ceci:

NSInteger intSort(id num1, id num2, void *context) 
{ 
    int v1 = [num1 intValue]; 
    int v2 = [num2 intValue]; 
    if (v1 < v2) 
     return NSOrderedAscending; 
    else if (v1 > v2) 
     return NSOrderedDescending; 
    else 
     return NSOrderedSame; 
} 

// sort things 
NSArray *sortedArray; sortedArray = [anArray sortedArrayUsingFunction:intSort context:NULL]; 

apple docs reference

+0

devrait probablement utiliser la version des blocs de nos jours – slf

+0

Comment le feriez-vous dans swift? –

+0

@ AndriusSteponavičius http://stackoverflow.com/questions/25769107/sort-nsarray-with-sortedarrayusingcomparator – slf

0

Lorsque vous convertissez les valeurs en chaînes, le tri sera lexicographique plutôt que numérique, ce qui n'est pas ce que vous voulez en fonction de votre question. CLLocationDistance est défini comme étant de type double selon les documents Apple. Par conséquent, créez votre NSArray avec NSNumber instances initialisées avec vos données CLLocationDistance (voir numberWithDouble), et utilisez l'implémentation de tri de NSArray par rapport à celles-ci.

Plus sur NSNumber est here.

Questions connexes