|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
Code :
un tableau trié sur une clé ayant des valeurs égales ne se tri pas correctement. Souvent la clé du milieu (c'est à dire ayant pour indice la moitié du nombre d'entrées) se retrouve en tête du tableau et le reste inchangé. Ex: tableau initial 0 => 0 1 => 0 2 => 0 3 => 0 4 => 0 5 => 0 6 => 0 7 => 0 8 => 0 9 => 0 10 => 0 devient 5 => 0 0 => 0 2 => 0 3 => 0 4 => 0 1 => 0 6 => 0 7 => 0 8 => 0 9 => 0 10 => 0 Merci pour votre aide. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 572 ![]() |
Heu... deux choses que je ne comprends pas à la lecture de ton post :
- pourquoi parler de tableau multidimensionnel ? ![]() - quel est le problème exactement... ? Les indices sont numériques et non pas des chaines, donc "après tri" sur un tableau dont toutes les valeurs sont à 0, le tableau a la même longueur, des indices numériques... il est identique au tableau avant le tri.... non ? A quel niveau est-ce que ça pose problème ?
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
00
|
|
|
#3 | ||
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
Citation:
Citation:
table[0]["sexe"] = masculin table[0]["prenom"] = jimmy table[0]["age"] = 30 table[1]["sexe"] = masculin table[1]["prenom"] = romain table[1]["age"] = 30 table[2]["sexe"] = masculin table[2]["prenom"] = bob table[2]["age"] = 30 Avec un tri sur l'âge (valeur numérique) le tableau ne devrait pas changer d'état ... puisque pour les 3 entrées l'âge est égal à 30. OR il se trouve qu'à partir d'un certain nombre d'entrée; le tableau change d'ordre. |
||
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 572 ![]() |
Bon, ça se précise mais... pas encore tout-à-fait
![]() La seconde "dimension" de ton tableau est basée sur des indices numériques (ce qui, en effet, suite au comportement que tu signales, pourrait poser problème) ? Ou bien sur des clefs sous formes de chaines (le principe du tableau associatif ou hash, en fait), comme dans l'exemple que tu donnes ici : Citation:
Parce que je ne vois pas en quoi l'extrait ci-dessus est différent de : Citation:
Tu accèdes aux éléments de la même manière avant et après traitement, donc le problème n'est pas ici mais en aval, dans un traitement que tu dois faire après cette étape, j'imagine... ^^ >>> Dis-nous ce que tu veux faire avec le tableau "trié" mais qui ne fonctionne pas (affichage, calcul, etc.)
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
||
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
C'est bien au premier niveau, c'est à dire dans le tableau principal, celui que je veux trier en fait, que ce passe mon problème.
table[0]["sexe"] = masculin table[0]["prenom"] = jimmy table[0]["age"] = 30 table[1]["sexe"] = masculin table[1]["prenom"] = romain table[1]["age"] = 30 table[2]["sexe"] = masculin table[2]["prenom"] = bob table[2]["age"] = 30 ... en triant table par rapport à l'âge des entrées (sous tableaux), en ayant tout les âges identiques, le tableau ne devrait pas bouger. En fait je me retrouve avec par exemple: table[0]["sexe"] = masculin table[0]["prenom"] = romain table[0]["age"] = 30 table[1]["sexe"] = masculin table[1]["prenom"] = bob table[1]["age"] = 30 table[2]["sexe"] = masculin table[2]["prenom"] = jimmy table[2]["age"] = 30 ... ? Les valeurs, entrées, ou bien encore sous tableaux comme vous voulez, ont changé d'indice. Pourquoi? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 572 ![]() |
Je crois qu'il faudrait voir un peu de code pour s'y retrouver : montre-nous comment est appelée ta fonction de tri, avec un peu de contexte si possible
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
00
|
|
|
#7 | ||||
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
Hum... Je pensais que c'était plutôt clair
![]() Exemple Code :
Code :
|
||||
|
|
00
|
|
|
#8 | ||||||
![]() ![]() Inscription : janvier 2011 Messages : 2 933 ![]() |
Bonjour à tous,
une chose me chagrine dans ce qui est fait... ...tri sur un tableau d'objet! Code :
Code :
la fonction attend en paramètre des éléments du tableau soit la première fois table[0] et table[1] dans la fonction on a donc ces éléments sous référence a et b, et dans ce cas utiliser a[0] et b[0] reviens à utiliser table[0][0] et table[1][0]. comme table[0], et les autres, pointe sur un tableau associatif table[0][0] est undefined. Il te faut utiliser dans la fonction a.age ou encore a['age'] Code :
|
||||||
|
|
10
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
Tableau d'objets ? ... Hum ... un tableau est objet. Donc tableau de tableaux ou tableau d'objets ... c'est ... pareil Cependant pour la deuxième partie vous avez tout à fait raison, j'ai recopié et simplifié mon code un peu vite. Comme je le disais avant j'utilise de champs différents en fonction du remplissage de ma base de données. Faire ce tri avec a["age"] et b["age"] ne change pas le problème. Si les âges sont égaux le tri présente l'erreur citée plus haut. Je vais réécrire mon exemple... |
|
|
00
|
|
|
#10 | ||||
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
Exemple
Code :
Code :
|
||||
|
|
00
|
|
|
#11 | ||
![]() ![]() Inscription : janvier 2011 Messages : 2 933 ![]() |
le résultat que tu obtiens est celui de CHROME, les autres navigateurs sur lesquels je viens de tester rendent unanimement le tableau inchangé, avec toutefois une différence de traitement notable quant à l'ordre de passage pour l'examen des éléments.
le script de test Code :
Si tu veux un rendu identique il va te falloir utiliser ta propre fonction maîtrisée |
||
|
|
10
|
|
|
#12 |
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
Intéressant ... Je n'avais pas pensé à changer de navigateur ... je suis tellement content de Chrome... que j'en oublie les autres
![]() Je développe sur Mac 10.6.7 et j'ai testé sous Chrome 11.0 Firefox 3.6 et Safari 5.0. J'ai effectivement noté la différence de passage à la fonction, ainsi que le résultat inattendu sous Chrome. Au début je pensais à une différence de calcul; comme le modulo qui est affecté sur les grandes valeurs en fonction des mémoires. Mais là apparemment rien à voir. Qu'entendez-vous par fonction maitrisée? Pensez-vous qu'une solution est envisageable? |
|
|
00
|
|
|
#13 | ||
![]() ![]() Inscription : janvier 2011 Messages : 2 933 ![]() |
concernant CHROME, il rend un résultat identique sur des tableaux à 1 dimension ce qui ne convient donc pas dans ton cas.
Si il est important de conserver l'ordre original en cas d'égalité, ce qui est tout à fait louable, et compte tenu de la particularité de CHROME, il te faut peut être utiliser un tri simple par exemple Code :
Code :
fctTri ( tableau, 'age'); // ou age est le champ a trier |
||
|
|
10
|
|
|
#14 |
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 60 ![]() |
Merci pour votre aide. Votre exemple m'a bien aidé à comprendre comment parvenir à mes fins.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com