2017-02-03 1 views
0

Je voudrais trier un tableau en utilisant NSSortDescriptor, basé sur intValue d'un champ. Cela fonctionne parfaitement en utilisant le code suivant:NSSortDescriptor - tri par intValue avec 0 à la fin

 descriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"lowerPrice.floatValue" ascending:YES]; 

Le seul problème est que ce champ soit contient une valeur, peu importe ce que, si certaines valeurs sont 0. Mais, dans mon classement, les 0. devrait venir comme absolue dernier. Fondamentalement, 0,1 devrait être d'abord, tout le chemin jusqu'à 50, puis les 0. Mais en utilisant floatValue dans l'ordre croissant, j'obtiens évidemment les 0 en premier.

Quelle est la manière la plus élégante et la plus simple de résoudre ce problème?

+0

Je vous suggère d'utiliser un 'NSComparisonResult' place et un bloc à trier, mais il est impossible si vous utilisez ce genre de CoreData. – Larme

+1

Vous pouvez utiliser 'sortDescriptorWithKey: ascendant: comparateur:' et écrire votre comparateur personnalisé – vadian

Répondre

1

Utilisez sortedArrayUsingComparator: qui prend un bloc qui est appelé pour comparer des paires d'éléments et retourner leur ordre. Dans le premier bloc de test pour les zéros et retourner l'ordre approprié (deux zéros sont égaux, un zéro est plus grand que toute autre chose), s'il n'y a pas de retour de zéros basé sur l'ordre numérique vrai.

HTH