2014-06-09 2 views
-1

Mon application a une liste de scores élevés qui contient tous les scores qu'un joueur a faits. J'utilise un NSMutableArray pour cela, que je trier et montrer dans l'ordre décroissant dans un UITableView.Trier NSMutableArray avec des nombres supérieurs à 10

[arrayWithScores sortUsingSelector:@selector(compare:)]; 
reversed = [[arrayWithScores reverseObjectEnumerator] allObjects]; 

Cela fonctionne, mais quand un joueur atteint un score supérieur à 10, le tableau n'est le chemin plus triés je veux.

Par exemple, ce qu'il fait:

7, 5, 4, ... 10, 

Il met 10 à la fin parce qu'il commence par 1, ce qui est évidemment le score le plus bas de ce tableau. Mais je veux le gérer comme 10 à la place et le mettre au début.

Ce que je veux dans ce cas:

10, 7, 5, 4, ... 

Comment puis-je y parvenir?

+2

vous devez les trier comme des nombres et non comme des chaînes. – holex

+0

Merci, pouvez-vous me dire comment les trier en tant que numéros? – Harold

Répondre

1

Vous devez les stocker sous forme de nombres (NSNumber objets) car c'est le type le plus approprié pour ces données. Pendant la présentation, vous pouvez les convertir en chaînes:

NSMutableArray *arrayWithScores = ...; 

// Insert new score 
NSNumber score = @(10); 
[arrayWithScores insertObject:score]; 

// Sort 
[arrayWithScores sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    return [(NSNumber *)obj1 compare:(NSNumber *)obj2] == NSOrderedAscending; 
}]; 
+0

Je préfère changer le type des paramètres d'entrée plutôt que de les convertir en objets ... '... NSComparisonResult (NSNumber * number1, NSNumber * number2) {...' mais ça ira bien comme ça: D – Fogmeister

+0

dans l'OP, nous ne connaissons pas le type des éléments, cela semblerait "pervers", mais les éléments peuvent être des cordes. il vaudrait mieux comparer 'doubleValue' à la place, c'est une méthode valide de' NSNumber' et 'NSString'. – holex

+0

@holex Nous connaissons le type d'articles; ce sont des scores qui sont des nombres, donc le meilleur type de données pour les représenter est 'NSNumber' s'ils doivent entrer dans une classe de collection Objective-C. La chaîne n'est nécessaire que pendant la présentation et non pour le stockage interne. – trojanfoe

Questions connexes