2010-09-24 7 views

Répondre

0

Vous pourriez facilement écrire cette fonction vous-même. Juste itérer sur le tableau. La décision de conception délicate est pourquoi faire quand différents comparateurs retournent des résultats différents. Par exemple. Disons que nous comparons une Ferrari et un gros tas de saleté en utilisant un tableau avec deux comparateurs: le coût et la taille. La Ferrari coûte plus cher mais le tas de terre est plus gros. Lequel disons-nous est "plus grand"? C'est une décision de conception que vous devez prendre en fonction de votre domaine de problème spécifique.

+0

A « construite en fonction » serait un code plus simple et peut mettre en œuvre une certaine optimisation. Comme pour votre exemple, le sélecteur dans le NSSortDescriptor saurait comment comparer les deux. Si les descripteurs de tri étaient mutuellement exclusifs, je n'utiliserais pas un tableau de descripteurs. Pour l'instant, j'ai implémenté cette fonction moi-même, mais j'aimerais quand même savoir si une telle fonction existe. Merci pour la réponse. –

0

Cela devrait fonctionner correctement:

+ (NSComparisonResult)compareObject:(id)firstObject toObject:(id)secondObject withSortDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors { 
    NSComparisonResult result; 
    NSUInteger index = 0; 
    do { 
     NSSortDescriptor *sortDescriptor = [sortDescriptors objectAtIndex:index]; 
     result = [sortDescriptor compareObject:firstObject toObject:secondObject]; 
     index += 1; 
    } while (result == NSOrderedSame && index < sortDescriptors.count); 

    return result; 
}