Trier un dictionnaire contenant d'autre collections
6ix
Membre
Hello,
Mon problème porte sur le tri d'un dictionnaire "complexe".
Ma structure est la suivante:
- Dict1 (NSDictionnary) contient des objets Objet1
- ... qui contiennent chacun un tableau Array2 (NSArray)
- ... qui contient des objet Objet3
- ... qui contiennt chacun une CLLocation (car sur iPhone, mais le problème n'est pas lié à une spécificité iPhone).
Ce que je voudrais, c'est trier mon Dict1 d'après la distance entre la localisation actuelle (appelons-la localisationCourrante) et la CLLocation "référence" de chaque Objet1, qui est en fait la CLLocation de Objet3 dans le 1er élément de Array2.
Pour calculer la distance entre 2 points, pas de problème, la méthode existe.
Par contre, je ne sais pas trop comment créer une méthode de tri:
- opérant d'abord le calcul de la distance pour chaque Objet1 entre localisationCourrante et CLLocation de l'Objet1
- et triant ensuite Dict1 d'après ces distances obtenues
La distance n'étant rien d'autre qu'un nombre, la comparaison n'est plus très compliquée... une fois ces distances calculées!
Ai-je été assez clair?
Auriez-vous des idées, suggestions, de simples pistes...?
Mon problème porte sur le tri d'un dictionnaire "complexe".
Ma structure est la suivante:
- Dict1 (NSDictionnary) contient des objets Objet1
- ... qui contiennent chacun un tableau Array2 (NSArray)
- ... qui contient des objet Objet3
- ... qui contiennt chacun une CLLocation (car sur iPhone, mais le problème n'est pas lié à une spécificité iPhone).
Ce que je voudrais, c'est trier mon Dict1 d'après la distance entre la localisation actuelle (appelons-la localisationCourrante) et la CLLocation "référence" de chaque Objet1, qui est en fait la CLLocation de Objet3 dans le 1er élément de Array2.
Pour calculer la distance entre 2 points, pas de problème, la méthode existe.
Par contre, je ne sais pas trop comment créer une méthode de tri:
- opérant d'abord le calcul de la distance pour chaque Objet1 entre localisationCourrante et CLLocation de l'Objet1
- et triant ensuite Dict1 d'après ces distances obtenues
La distance n'étant rien d'autre qu'un nombre, la comparaison n'est plus très compliquée... une fois ces distances calculées!
Ai-je été assez clair?
Auriez-vous des idées, suggestions, de simples pistes...?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ce que je n'ai pas compris c'est "je veux trier Dict1". Par définition, on ne peut pas trier un dictionnaire.
Puisque ça va t'être utile, un tri sous Cocoa se fait habituellement grâce à un Sort Descriptor http://developer.apple.com/documentation/Cocoa/Conceptual/SortDescriptors
Il te faudra une méthode pour comparer deux Objet1, à refiler à -[NSSortDescriptor initWithKey:ascending:selector:].
Effectivement. En fait je le transforme en tableau d'abord en faisant [myDict1 allValues].
Oui j'ai déjà lu ce que je pouvais sur la façon de trier un tableau et les différentes manières de le faire.
Première chose que j'ai remarqué: je ne peux pas créer un descriptor "tout simple", du style
car je n'ai pas directement cet élément distance, je dois d'abord le calculer d'après une valeur que j'ai et une autre que je vais chercher dans la "hiérarchie" de mon Dict1.
Une façon de faire serait comme dit schlum, à savoir ajouter cette variable à Objet1 après l'avoir calculée, de manière à pouvoir créer un descriptor de la sorte.
Deuxio, je me suis donc intéressé à la possibilité d'effectuer un tri en passant en argument une méthode que l'on définit soi-même pour réaliser la comparaison. Problème ici, une telle méthode prend en argument 2 objets à comparer, mais pas moyen de lui passer un argument "externe" qui serait ici ma localisation courante...
Je vais donc tenter la méthode de schlum.