Forcer un tri imposé sur un array

Hello,
Je cherche à imposer un tri sur le contenu d'une clé d'un array.
Donc ce tri n'est pas alphabétique, ni numérique.
L'ordre sur le contenu de la clé serait G, K, B, D.
Est-il possible de faire cela avec les sort descriptors ? (sous-classe ? , méthode compareObject:toObject: ?)
Je cherche à imposer un tri sur le contenu d'une clé d'un array.
Donc ce tri n'est pas alphabétique, ni numérique.
L'ordre sur le contenu de la clé serait G, K, B, D.
Est-il possible de faire cela avec les sort descriptors ? (sous-classe ? , méthode compareObject:toObject: ?)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Après le mieux c'est peut-être plutôt de prévoir, dans les objets que tu veux comparer, une méthode "compare:", qui est la méthode appelée lors des comparaisons par défaut (par exemple avec un NSSortDescriptor c'est la méthode "compare:" qui est appelé sur les objets à comparer pour savoir dans quel ordre les trier l'un par rapport à l'autre). Du coup dans cette méthode "-compare:" de tes objets tu mets le code que j'ai mis dans le block au dessus (enfin qui prendre que obj2 en paramètre, obj1 correspondant dans ce cas à l'objet "self"). Et du coup tu feras les comparaison normalement, avec un NSSortDescriptor assez classique du coup, et c'est ta classe qui sait comment faire la comparaison entre 2 instances.
En fait, l'application est > iOS 4 donc c'est bon pour les blocks.
Je m'accroche sur ton code, mais j'ai un autre soucis : en fait j'ai besoin de trier avec 2 descripteurs:
- le premier sur une clé, dont l'ordre est imposé comme tu l'as montré brillamment (avec les blocks donc par exemple)
- le deuxième classique (ordre alpha sur une autre clé)
Il s'agit donc de fusionner les 2 sans encombre (alliance de la vieille technique et de la nouvelle ou bien on peut le faire qu'avec les blocks aussi ?). J'ai beau relire ton paragraphe, et même avec une méthode compare:, je sèche un peu dans quel ordre il faut faire les choses.
Autrement dit, tu crées un NSSortDescriptor en utilisant [tt]+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr[/tt], en mettant comme NSComparator le code que j'ai plus plus haut dans le block (enfin s'il marche, je l'ai tapé direct dans le forum j'ai pas testé, je te laisse adapter au besoin).
Et après bah tu fais comme d'habitude, tu utilises sortedArrayUsingDescriptors en passant un NSArray avec tes 2 sortdescriptors, celui-là et le 2e classique pour ordre alpha sur ton autre clé.
oO
Ali, le roi des blocks.