IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Tri de tableaux avec mémorisation des indices


Sujet :

JavaScript

  1. #1
    Expert éminent

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Points : 8 107
    Points
    8 107
    Par défaut Tri de tableaux avec mémorisation des indices
    Bonjour,

    J'ai un tableau (Array) qui contient les éléments suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tabD[0]=340;
    tabD[1]=111;
    tabD[2]=481;
    tabD[3]=480;
    tabD[4]=111;
    Je duplique ce tableau dans un autre Array qui s'appelle tabF et j'utilise la fonction sort pour trier mon tableau:
    Je récupère donc en sortie les valeurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tabF[0]=111;
    tabF[1]=111;
    tabF[2]=340;
    tabF[3]=480;
    tabF[4]=481;
    Je souhaiterai pouvoir mémoriser le changement d'indice qui s'est effectué, j'effectue donc la boucle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    tab_indices =  new Array();
     
    k=0;
    while(k!=nb_notices+1){ //nb_notices correspond à la longueur de mes tableaux
    	j=0;
    	while(j!=nb_notices+1){
    		if(tabF[j]==tabD[k]){
    			//Si on trouve un élément qui est le même dans les tableaux tabD et tabF on mémorise l'indice
    			tab_indices[j] = k;
    			alert("tab_indices[j] = "+tab_indices[j]+" k = "+k+" j = "+j);
    		}
    		j=j+1;
    	}
    	k=k+1;
    }
    NB : J'utilise le Javascript dans des conditions un peu spéciales, je ne peux pas utiliser de boucles for (à cause du symbole "<" ou ">"), j'utilise donc des boucles while (je sais que ça fait pas très "pro" ).
    Je ne peux pas utiliser non plus le PHP. Il me faut une solution 100% Javascript.

    Après ce traitement, j'obtiens le résultat suivant (grâce à l'alert que j'ai placé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tab-indices[j] = 0 , k=0 , j=2
    tab-indices[j] = 1 , k=1 , j=0
    tab-indices[j] = 1 , k=1 , j=1
    tab-indices[j] = 2 , k=2 , j=4
    tab-indices[j] = 3 , k=3 , j=3
    tab-indices[j] = 4 , k=4 , j=0
    tab-indices[j] = 4 , k=4 , j=1
    Comme tabD[1] et tabD[4] ont la même valeur, j'obtiens une fois que le traitement est fini :
    tab-indices[0] = 4 et tab-indices[1] = 4 alors que je devrais avoir :
    tab-indices[0] = 1 et tab-indices[1] = 4 (ou inversement, peu m'importe)

    Mais toutes les valeurs de tab-indices doivent être différentes.

    En fait, je dois mémoriser ces changements d'indices car j'ai une trentaine d'autres tableaux (Array) à mettre à jour selon le tri qui a été effectué.
    Mon problème paraît simple au premier abord, mais je ne vois pas trop comment avoir une solution. Je ne connais pas à priori le nombre d'élément qui seront en double, triple ou même quadruple dans mon tableau. Et mon tri marche nickel si il n'y a pas de doubles dans le tableau...

    Toute aide est la bienvenue !

  2. #2
    Expert éminent

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Points : 8 107
    Points
    8 107
    Par défaut
    Bon ben j'ai trouvé une solution, moyennant une grosse bidouille, je modifie les valeurs de tabD et tabF quand je suis dans le cas du if pour ne pas que ces valeurs soient réutilisées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    tab_indices =  new Array();
     
    k=0;
    while(k!=nb_notices+1){
    	j=0;
    	while(j!=nb_notices+1){
    		if(tabF[j]==tabD[k]){
    			tab_indices[j] = k;
    			alert("tab_indices[j] = "+tab_indices[j]+" k = "+k+" j = "+j);
    			tabD[k]=-k;
    			tabF[j]=-j;
    			k=k+1;
    		}
    	j=j+1;								
    	}
    }
    Et là j'obtiens bien le bon résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab-indices[0] = 1 
    tab-indices[1] = 4

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Tri ordre croissant avec problème des doublons
    Par ussparasunki dans le forum Excel
    Réponses: 5
    Dernier message: 20/12/2014, 18h41
  2. Réponses: 3
    Dernier message: 07/09/2007, 15h29
  3. [Débutant] Nom de variable avec des indices
    Par scraven dans le forum MATLAB
    Réponses: 4
    Dernier message: 24/04/2007, 21h02
  4. Réponses: 16
    Dernier message: 24/11/2005, 12h43
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo