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

Algorithmes et structures de données Discussion :

trier en fonction de 2 critères


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut trier en fonction de 2 critères
    Salut,
    dans une appli qui liste les fichiers d'un répertoire, j'ai des tris par nom, taille, date. ça c'est facile.

    J'ai 3 tableaux tabNom, tabTaille, tabDate.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $tabNom = array(
       0 => 'Fichier 1.doc',
       1 => 'document.txt',
       2 => 'rapport.doc'
    )
     
    $tabTaille = array(
       0 => 3 (ko)
       1 => 1 (ko)
       2 => 3 (ko)
    )
    Je trie l'un de ces tableau, puis après quand j'affiche la liste, je me base sur les index du tableau trié. Bref ça marche.
    (dans l'exemple, un tri sur le nom donnerait la liste d'index 1 0 2, puis j'affiche $tabNom[1]/$tabTaille[1], puis $tabNom[0]....)

    Mais, tordu comme je suis, j'ai envie de compliquer un peu l'affaire.
    Comment trier par taille puis par nom de fichier en cas d'égalité ?

    Si je trie par taille, je peux obtenir 1 2 0 ou 1 0 2. J'aimerai que les 2 ex-aequo soient triés par nom et donc obtenir
    - 1 document.txt 1ko
    - 0 Fichier 1.doc 3ko
    - 2 rapport.doc 3ko

    Comment faire avec mes tableaux?

  2. #2
    duj
    duj est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Par défaut
    Et ben là, à mon avis , tu ferrais mieux d'utiliser un tableau à 2 dimensions, et utiliser un algo de tri "classique" qu compare d'abord sur les noms, et ensuite, si égalité, sur la taille.

    Si tu veux absolument faire ca avec 2 tableaux, tu aura besoin d'un troisième array qui lui, contient le résultat du tri car tu dois conserver les correspondances

  3. #3
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    Un tableau à 2 dimensions, je veux bien, mais je le remplis comment ?
    [code]$tab2D[0] = [taille ; nom]
    $tab2D[1] = [taille ; nom][code]

    comme ça ?

  4. #4
    m@
    m@ est déconnecté
    Membre expérimenté
    Avatar de m@
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Par défaut
    je sais pas si c'est optimisé, mais sinon tu peux aussi faire un tableau
    à deux dimensions que tu remplis avec au premier niveau les tailles et au second les noms.
    tu classes chaque cellule (soit classer les noms d'une même taille), tu classes le tableau (soit classer les tailles) puis tu récupères toutes les valeurs avec une boucle.

  5. #5
    duj
    duj est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Par défaut Re: trier en fonction de 2 critères
    Pour faire un tableau à 2 dimesions (soory pour la syntaxe, php et moi, ca fait deux,...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $tabNomAndTaille = array(
       0 => 'Fichier 1.doc', 3 (ko)
     
       1 => 'document.txt',1 (ko)
     
       2 => 'rapport.doc',3 (ko)
     
    )
    pour le tri tu fais le même, sauf que tu compare sur les 2 valeurs au lieu d'une seule.

  6. #6
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    OK merci, je ferai des essais...

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    La fonction de tri du langage que tu utilises ne permet pas de spécifier le prédicat de comparaison à utiliser ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Membre éprouvé Avatar de kaisse
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Par défaut
    Citation Envoyé par Luc Hermitte
    La fonction de tri du langage que tu utilises ne permet pas de spécifier le prédicat de comparaison à utiliser ?
    Effectivement, il suffirait de definir une fonction de la sorte

    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
     
    comparaison_double : fichier X fichier -> entier
     
           si taille[fichier1] < taille[fichier2]
                retourner -1
           si taille[fichier1] > taille[fichier2]
                retourner +1
     
           /* Si on est la c que taille[fichier1] = taille[fichier2] */
     
           si nom[fichier1] < nom[fichier2]
                retourner -1
           sinon
                 retourner +1
     
    fin comparaison_double
    Il faut juste definir les operateurs de comparaisons < et > pour les chaines de caracteres, ce qui est en gemeral fourni en standard

  9. #9
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    et array_multisort() ? Ca ne va pas ici ?

  10. #10
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    'tendez, chui pas encore rentré chez moi

  11. #11
    Nouveau candidat au Club
    Inscrit en
    Juin 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 2
    Par défaut
    Petite précision, la syntaxe d'un tableau à 2 dimensions en php est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Tableau2dim = array ("nomfichier" => array ("fic1.doc","fic2.txt","fic3.html"),"taille"=>array("1Ko","2Ko","0Ko"));
    ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $Tableau2dim["nomfichier"][] = "newfic";
     
    echo ($Tableau2dim["nomfichier"][2]);  // affiche fic3.html
    echo ($Tableau2dim["taille"][2]);  // affiche 0Ko
    Mais tu as également une astuce qui conciste à mettre comme poiteur des cellules d'un tableau à 1 dim.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $Tab = array("fic1"=>"1Ko","fic2"=>"2Ko",...);
     
    // pour le trier par taille :
    sort ($Tab);
     
    //pour le trier par nom de fichier :
    ksort($Tab);
    Et voila c'est plus simple....

  12. #12
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Citation Envoyé par prgasp77
    et array_multisort() ? Ca ne va pas ici ?
    heu ... cette fonction me parait la plus appropriee non ?

  13. #13
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    array_multisort semble faire l'affaire, mais ça me détruit l'ordre des clés

    Alors j'ai rajouté une colonne avec mes clés dans le tableau à 2D.
    1e colonne, taille
    2e colonne, nom
    3e colonne, clés.

    Et à la fin je récupère mes clés dans le bon ordre

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

Discussions similaires

  1. [XL-2010] Userform trier en fonction de certains critères.
    Par SANTOi dans le forum Excel
    Réponses: 4
    Dernier message: 27/05/2014, 08h59
  2. [MySQL] Récupérer des données trier en fonction de deux critères
    Par student_php dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/10/2010, 15h46
  3. Réponses: 66
    Dernier message: 12/06/2006, 09h06
  4. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 16h26
  5. Réponses: 6
    Dernier message: 11/10/2004, 14h58

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