2013-06-14 2 views
0

Voici le code que j'utilise pour trier les éléments dans un NSMutableArray. Le code fonctionne sans erreur mais après l'application du filtre, la commande ne change pas. Est-ce que je fais quelque chose de mal?Le tri de NSMutableArray ne modifie pas l'ordre des objets

NSArray *filtered = [posts sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    Post *post1 = (Post *)obj1; 
    Post *post2 = (Post *)obj2; 

    int p1 = post1.firstPhotoVoters.count + post1.firstPhotoVoters.count; 
    int p2 = post2.firstPhotoVoters.count + post2.firstPhotoVoters.count; 

    if (p1 < p2) return (NSComparisonResult)NSOrderedAscending; 
    if (p1 > p2) return (NSComparisonResult)NSOrderedDescending; 

    return (NSComparisonResult)NSOrderedSame; 
}]; 
+2

"la commande ne change pas" - vérifiez-vous l'ordre de 'posts' ou' filtered'? – Kreiri

+1

Les moulages 'NSComparisonResult' sont complètement inutiles. De plus, vos variables 'p1' et' p2' sont étranges, puisqu'elles ne prennent que le double du nombre (et elles devraient être 'NSUInteger'). Le tri par double valeur équivaut à trier juste par valeur. – Sulthan

+0

Vérifiez-vous l'ordre de 'filtered' ou' posts'? Le retour 'NSOrderedSame' est-il toujours atteint lorsque le bloc est exécuté? – CodaFi

Répondre

0
int p1 = post1.firstPhotoVoters.count + post1.firstPhotoVoters.count; 
int p2 = post2.firstPhotoVoters.count + post2.firstPhotoVoters.count; 

Vous utilisez la même propriété deux fois. Il devrait y avoir probablement une propriété différente comme l'un des opérandes.

1

Vous pouvez mettre sur return NSOrderedAscending et des points d'arrêt return NSOrderedDescending, connectez-vous firstPhotoVoters.count pour les deux objets pour voir si quelque chose d'inattendu se produit. Le code est bien à part le fait que vous pouvez utiliser

int p1 = post1.firstPhotoVoters.count; 
int p2 = post2.firstPhotoVoters.count; 

au lieu de

int p1 = post1.firstPhotoVoters.count + post1.firstPhotoVoters.count; 
int p2 = post2.firstPhotoVoters.count + post2.firstPhotoVoters.count; 

et rien ne changerait, un gaspillage de cycles.

+0

Oui, il s'agit simplement d'une erreur de pâte de copie. –

+0

Lorsque vous dites que la commande ne change pas, vous voulez dire l'ordre de filtrage par rapport aux messages? – jbat100

+0

Le côté droit de l'opérateur sum doit être secondPhotoVoters.count. Merci pour l'aide. –

Questions connexes