tri (sort) de deux NSMutableArray liés
Bonjour, et merci d'avance (lol)
voila , j ai deux NSMutableArray : variable (des double) et effectif (des long) (je fais des stats)
je voudrais trier les deux en même temps
je sais déjà trier l'un indépendament de l'autre en faisant :
[variable sortUsingSelector : @selector(compare];
mais le problème est que si le tableau variable est bien trié, celui effectif ne l est pas donc on perd la correspondance...
et si je trie les deux successivement,
[variable sortUsingSelector : @selector(compare];
[effectif sortUsingSelector : @selector(compare];
c est pareil, même pire, chacun est trié indépendamment de l'autre donc leur lien est perdu aussi
quelqu un a t il deja eu le meme problème ?
merci
pare:)];
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bonjour,
Désolé, j'ai pas bien compris ta question
C'est quoi la relation entre les deux Arrays ? et pour quoi le tri de l'un influence le tri de l'autre ?
bonjour
parce que
variable(i)=la valeur de la série statistique
effectif(i)=l'effectif (ie le nombre de fois que cette valeur est atteinte dans la série statistique)
si tu ordonnes variable selon les variable croissant, effectif lui n est pas ordonné en meme temps et du coup tu n a plus avec l index i, la correspondance entre la variable et son effectif...
Ok.
Pour garder la correspondance entre les deux liste, moi j'aurais créer un dictionnaire avec les clés la valeur de la série statistique et la valeur de la clé l'effectif, comme ça tu pourra trier ton dictionnaire avec les clés si tu veux.
Un truc de genre :
ensuite si tu veux trier les valeurs :
.....
Ici il est dit
Faire un objet modèle avec une @property (assign)float variable et une @property (assign) long effectif (ou un dictionnaire comme le suggère samir) serait le moyen de t'en sortir à moindre frais.
ok merci pour ces réponses, je vais essayer tout cela
merci ça marche !
::)
Tu peux retrouver tes deux tableaux d'origine en faisant
tableauVariable = [tableauObjetsVariableEffectif valueForKeyPath:@variable];
Et les habituels count/distinctValues/average/max/min si besoins avec les opérateurs sur les tableaux.
reBonjour,
J'ai à nouveau un petit soucis que je n'arrive pas à résoudre, par rapport à ce que j'ai écrit ci-dessus.
Imaginons un tableau variable = 7, 6, 1, 3, 4, 2, 5
et un tableau effectif = 2 , 75 , 34 , 62 , 75 , 19 , 75 ainsi qu'un 3eme tableau correspondant aux frequence que je calcule aussi
quand je veux trier les trois tableaux, qui sont liés (la variable 7 a un effectif de 2 et une frequence de ..., la variable 6 a un effectif de 75 et une frequence de ...) en ordonnant selon variable, j'utilise le code suivant :
et cela marche parfaitement, mais le problème est que quand je veux trier ces mêmes tableaux selon l effectif ou la frequence croissante, comme il y a plusieurs effectifs identiques (ce qui ne peut jamais arriver avec variable) un seul est compté ! du coup les tableaux finaux sont tronqués....Voici le code que j utilise :
je suis très novice et ne vois pas comment régler mon problème
merci de ma voir lu et d avoir éventuellement une réponse...
:-*
Fais toi plutôt un objet (appellons-le "Stat") représentant un triplet {variable, effectif, fréquence} (une sous-classe de NSObject avec 3 @property donc). C'est ça que tu vas manipuler, car ces 3 variables sont liées à chaque fois et tu ne veux pas qu'elles soient dissociées.
Ensuite, plutôt que de faire 3 NSArray (un pour variable, un pour effectif, un pour fréquence), tu vas plutôt te faire un tableau d'objet Stat, puisque chaque objet Stat regroupe variable+effectif+fréquence tout en un.
Du coup quand tu vas trier ce tableau, tu vas trier des objets Stat, et pas juste des entiers. Et donc ce sont les objets Stat qui seront réordonnés (d'après la propriété que tu veux, en l'occurrence selon la variable ou selon la fréquence, au choix), mais pour chaque Stat la variable sera toujours liée à son effectif et sa fréquence, tu ne risques pas d'avoir 3 tableaux à trier et de risquer de mélanger les données et ne plus avoir de correspondance.
Une fois que tu as ton NSArray* statsList d'objet Stats, pour les trier, rien de plus simple :
- Soit tu utilises des NSSortDescriptor, qui vont te permettre de préciser via quelle(s) clé(s) / propriété(s) tu veux trier tes objets et si tu les veux dans l'ordre croissant/décroissant. Pour ça tu peux utiliser ce genre de code :
- Soit tu utilises un block qui va permettre de décrire comment doivent être comparés chaque élément (la doc appelle ça un "Comparator Block"), avec ce genre de code :
je te remercie beaucoup pour cette réponse rapide
je vais essayer cela !