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 :

Fusion de deux listes d'une façon bien particulière


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Fusion de deux listes d'une façon bien particulière
    Bonjour,

    J'ai un problème à résoudre et je n'y arrive pas de manière simple et efficace. Voici mon problème:

    J'ai 2 listes

    ListA:
    new MyClassA { ID = 123, Position = 1 },
    new MyClassA { ID = 456, Position = 2 },
    new MyClassA { ID = 789, Position = 3 },
    new MyClassA { ID = 147, Position = 4 },
    new MyClassA { ID = 658, Position = 5 }

    ListB:
    new MyClassB { ID = 123, Position = 1 },
    new MyClassB { ID = 854, Position = 2 },
    new MyClassB { ID = 789, Position = 3 },
    new MyClassB { ID = 147, Position = 4 },
    new MyClassB { ID = 456, Position = 5 }

    Je souhaite que mon algo merge ces 2 listes en une seule liste My2ClassMerged de cette maniere

    ListResult:
    new My2ClassMerged { MyClassA, MyClassB}...
    123 1 -> 123 1
    456 2 -> NULL
    NULL -> 854 2
    789 3 -> 789 3
    147 4 -> 147 4
    658 5 -> NULL
    NULL -> 456 5

    L'idée c'est d'associé MyClassA avec MyClassB en se basant sur leur ID mais en veillant à garder leurs Positions dans l'ordre croissant dans la liste d'objet My2ClassMerged(en cas d'égalité des positions il n'y as pas d'ordre de priorité)

    Ainsi dans mon exemple MyClassA avec l'ID 456 dans la listA que l'on retrouve dans la listB en Position 5 ne peuvent pas être associés car on aurai la liste de My2ClassMerged suivante: (Ce qui m'empeche d'utiliser un FULL JOIN par exemple)

    ListResult:
    new My2ClassMerged { MyClassA, MyClassB}...
    123 1 -> 123 1
    456 2 -> 456 5 (WRONG)
    NULL p -> 854 2
    789 3 -> 789 3
    147 4 -> 147 4
    658 5 -> NULL

    J'ai tenter de résoudre ce probléme avec un while qui itere tour à tour sur les 2 lists et qui remplie la list result au fur et à mesure que des égalité d'ID sont detectées mais parfois le résultat n'est pas optimal

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour,

    Tu es sur un sous-forum algorithmique. Donc indépendant du langage. Tu parles de classes, de "while" ... mais où es-tu?

    Si on met les mains dans le code, je te réponds:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ awk '(NR==FNR){a[NR]=$0;next;} {if (a[FNR]==$0) print $0; else print a[FNR]"\n"$0; }' fichier1 fichier2
    123 1
    456 2
    854 2
    789 3
    147 4
    658 5
    456 5
    A vrai dire, je ne vois pas la question algorithmique.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    D'après ce que tu as écris, c'est un simple test.

    Tant que l'on n'est pas à la fin de la liste
    - récupérer élément de A : Ai
    - récupérer élément de B : Bi
    - si Ai_ID != Bi_ID alors écrire Ai -> NULL puis écrire NULL -> Bi
    - sinon écrire Ai -> Bi
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. fusion de deux liste simplement chainée
    Par mdh12 dans le forum Débuter
    Réponses: 6
    Dernier message: 14/01/2010, 19h23
  2. stockage de deux listes dans une liste finale
    Par Mobistar dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 07/08/2008, 18h36
  3. [AJAX] Gestion de deux listes sur une même table
    Par kabkab dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/01/2008, 13h48
  4. Fusion de deux requetes sur une même table
    Par jojosbiz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/06/2007, 09h18
  5. Faire defiler deux listes avec une scroll bar
    Par mcdelay dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/05/2007, 14h54

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