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

Collection et Stream Java Discussion :

Tri de tableau sur 2 critères


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut Tri de tableau sur 2 critères
    Bonjour.
    Il s'agit de trier un tableau à 2 dimensions:
    ens[1][]={"S1","A1"}
    ens[2][]={"S1","A0"}
    ens[3][]={"S2","A1"}
    ens[4][]={"S2","A0"}

    Il s'agit donc d'obtenir:
    S1,A0
    S1,A1
    S2,A0
    S2,A1
    Donc j'arrive à trier sur le 1er critère (S1..S2):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			Arrays.sort(ens, new Comparator<String[]>() {
    		        @Override
    		        public int compare(final String[] entry1, final String[] entry2) {
    		            final String sem1 = entry1[0];
    		            final String sem2 = entry2[0];
    		            if((!(sem1==null))&&(!(sem2==null)))
    		            {return sem1.compareTo(sem2);}
    		            else {return 0;}
    		        }
    		    });
    OK mais comment faire pour trier ensuite sur le 2ème critère (A0..A1) ?
    D'avance merci.

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Pour comparer sur n criteres, en supposant critere 0 > critere 1 > ... > critere n, il faut comparer critere 0. Si A0 > B0, alors A est plus grand que B. Si A0 < B0, alors A est plus petit que B. Sinon (A0 = B0), il faut passer au test de A1. Et ainsi de suite jusqu'à An

    Plus qu'à mettre ca en java

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut tri sur 2 critères
    Merci, mais pas très clair.
    Le 2ème critère (A0,A1) est donc entry[1]...
    Mais comment intégrer cela dans le code?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par laetisam Voir le message
    Mais comment intégrer cela dans le code?
    Après le premier critère, et avant de sortir de compare().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné
    Avatar de maxusn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 175
    Par défaut
    je ferais un truc du genre :

    Si tu as comme tableau:

    ens[1][]={"S1","A1"}
    ens[2][]={"S1","A0"}
    ens[3][]={"S2","A1"}
    ens[4][]={"S2","A0"}

    tu compares d'abord la première colonne des 2 premières cases , dans ce cas ce sont les mêmes : "S1", tu compare donc ensuite la 2éme colonne et tu te retrouves avec du A0 < A1 donc tu permutes ens[1] et ens[2].

    tu te retrouve donc avec
    ens[1][]={"S1","A0"}
    ens[2][]={"S1","A1"}
    ens[3][]={"S2","A1"}
    ens[4][]={"S2","A0"}

    et tu recommences.

  6. #6
    Membre émérite
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Par défaut
    Ton comparateur doit comparer donc deux lignes de ton tableau 2-dimensionel. pour se faire il compare le premier élément de la premiere ligne et le premier élément de la deuxième ligne. Si ces éléments sont égaux il compare le deuxième élément de la premier ligne avec le deuxième élément de la deuxième ligne.

    Je pense que ce code marchera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    		Arrays.sort(ens, new Comparator<String[]>() {
    			@Override
    			public int compare(final String[] entry1, final String[] entry2) {
    				if (entry1[0].equals(entry2[0]))
    					return entry1[1].compareTo(entry2[1]);
    				else
    					return entry1[0].compareTo(entry2[0]);
    			}
    		});
    Bonne chance.

Discussions similaires

  1. [Tableaux] Tri et compte sur tableau
    Par olbouss dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2008, 22h39
  2. tri sur plusieurs critères
    Par pas30 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/03/2007, 08h31
  3. Tri sur deux critères
    Par Flo4594 dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2006, 14h55
  4. [Tableaux] Help sur un tri de tableau...
    Par abou76 dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2006, 15h01
  5. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02

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