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

Langage Perl Discussion :

tableau 2D trié par suppression de lignes


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut tableau 2D trié par suppression de lignes
    Bonjour,
    J'ai un tableau de chiffres qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    120 | 123
     11 |  25
     35 |  40
      5 |  10
     42 |  82
    110 | 115
     90 | 100
    sauf que normalement ce tableau devrait être croissant donc j'aimerai non pas le trier mais supprimer les mauvaises lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     11 |  25 
     35 |  40 
     42 |  82
    110 | 115
    Si vous avez des astuces ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Un tableau n'est qu'à une dimension en perl, comment est codé ton tableau qui, ici, semble à deux dimensions ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Autre question : pourquoi le solution à ton exemple ne pourrait pas être ?
    120 | 123
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    réponse question 1 :
    C'est en effet un tableau à deux dimensions qui normalement est bien plus grand ... mais ce qui m'intéresse c'est uniquement ces deux colonnes.
    Mais je veut supprimer la ligne entière (ce qui ce fait facilement avec splice).

    C'est juste le moyen de sélectionner les lignes à supprimer qui me pose soucis

    réponse question 2 :
    Ba justement mon tableau doit être croissant mais garder un maximum d'information quand même ... en gros le plus grand possible avec toutes les bornes dans l'ordre croissante.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Quand tu parles de bornes croissantes, tu parles de la colonne 1 et 2 ?
    Mais comment :
    - traiter la première ligne ? (doit-elle est prise comme étant valide ou pas, car elle conditionne tout le reste)
    - comment traiter les cas où la colonne 1 est ordonnée, mais pas la colonne 2, ou inversement ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    la première ligne dans cette exemple n'est pas valide et doit être supprimer (ce qui complique les choses !).

    Si la colonne 1 est croissante la colonne 2 le sera aussi normalement. Si ce n'est pas le cas cela signifie que :
    1) inversion : la valeur de la colonne 1 et plus petite que la valeur de la colonne 2.
    2) recouvrement, exemple : 32 - 56 et 35 - 48.
    Sauf que dans mon cas je n'aurait jamais des choses comme ça que ce soit le 1) ou le 2) ! Je peut avoir des chevauchements mais pas des recouvrements ou d'inversions ... donc pas de soucis de ce côté là ! (ouf !)

    Je cherche le plus grand tableau trié possible en quelque sorte mais sans réaliser de trie juste en supprimant les lignes qui ne sont pas bonnes.

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Les problèmes sont :
    - je ne vois pas de condition évidente permettant de déterminer de manière objective quelle est la première ligne valide...
    - le critère de tri peut-il n'être réalisé QUE sur les données de la colonne 1 ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Oups mon post c'est dédoublé désolée !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Philou67430
    je ne vois pas de condition évidente permettant de déterminer de manière objective quelle est la première ligne valide...
    Si tu prend la première ligne tu auras un tableau d'une seule ligne or il me faut le plus grand tableau trié.


    Citation Envoyé par Philou67430
    le critère de tri peut-il n'être réalisé QUE sur les données de la colonne 1 ?
    C'est un tableau 2D si tu tri une colonne ça triera l'autre colonne avec et tu auras un tableau complètement trié certe mais c'est pas ce que je veut ...
    Je ne veut pas ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      5 |  10
     11 |  25
     35 |  40
     42 |  82
     90 | 100
    110 | 115
    120 | 123
    Mais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     11 |  25 
     35 |  40 
     42 |  82
    110 | 115
    Je sais pas si c'est plus claire, je ne veut pas faire un sort mais un splice sur le tableau ... mais je veut le tableau trié le plus grand possible.

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Prenons le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    120 | 123
    130 |  25
    350 |  40
      5 |  10
     42 |  82
    110 | 115
     90 | 100
    Où commence la première "bonne" ligne... ton énoncé me semble trop complexe pour trouver une solution : il faudrait tenter trop de combinaison possible de suppressions de ligne pour connaitre celle qui donnera la plus grande sélection...

    Pour la deuxième question, je ne comprends toujours pas sur quelle colonne il faut se baser pour déterminer sur une ligne est à sa place, ou si c'est un intrus...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Quand je parle de tri, je parle bien de condition d'ordre, pas de trier le tableau...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Ca je n'aurai jamais ce cas là !
    C'est déjà bien assez compliqué comme ça en même temps

    Citation Envoyé par Philou67430
    ton énoncé me semble trop complexe pour trouver une solution : il faudrait tenter trop de combinaison possible de suppressions de ligne pour connaitre celle qui donnera la plus grande sélection...
    C'est là mon soucis et pourquoi je cherchais si des personnes connaissent des astuces ou autre pour s'en sortir ... car il me faut à vraiment le plus grand des tableaux croissants ...

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Quand je parle de tri, je parle bien de condition d'ordre, pas de trier le tableau...
    Condition d'ordre ? C'est à dire ? Il faut que la borne n soit : n-1 < n <n+1 si ça te parle mieux.

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Voici un exemple qui supprime toutes les lignes dont la première colonne n'est pas supérieure à celle de la dernière ligne conservée dans le tableau.
    Comme la condition de départ n'est pas définissable (à mes yeux), je l'ai posée comme une valeur initiale à fournir en paramètre du script (et mise par défaut à 0).
    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
    17
    18
    19
    20
    21
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use Data::Dumper;
     
    my @array = ( [120, 123], [11, 25], [35, 40], [5, 10], [42, 82], [110, 115], [90, 100]);
     
    my $start = defined $ARGV[0] ? $ARGV[0] : 0;
    my $last_value = $array[$start];
    my @new_array = map $array[$_], $start, grep {
      if ($array[$_]->[0] >= $last_value->[0]) {
        $last_value = $array[$_];
        1;
      }
      else {
        0;
      }
    } $start+1 .. $#array;
     
    print Data::Dumper->Dump([\@array, \@new_array], [qw(*array *new_array)]);
    Avec 0 comme valeur initiale, le script retourne la ligne ne contenant que la première ligne du tableau initial. Avec 1, il retourne probablement ce que tu t'attends à avoir.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  15. #15
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par naoma Voir le message
    Condition d'ordre ? C'est à dire ? Il faut que la borne n soit : n-1 < n <n+1 si ça te parle mieux.
    C'est ce que j'appelle une condition d'ordre : n doit être > n - 1 et < n + 1.... oui mais, il faut définir la valeur de cette condition pour n = 0, car n = -1 n'existe pas !!
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    je réalise en faite que c'est vraiment très complexe, faudrait que je tente de m'orienté du côté de la programmation dynamique je pense .... :-\
    Grr, suis pas experte en la matière ...

Discussions similaires

  1. [MySQL] comment afficher un tableau avec tri par colonne ?
    Par tut dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2011, 17h19
  2. [Tableaux] Suppression de lignes dans un tableau
    Par lodan dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2006, 20h08
  3. [Word] Suppression des lignes d'un tableau
    Par sat478 dans le forum VBA Word
    Réponses: 2
    Dernier message: 06/09/2006, 14h22
  4. URGENt: recherche dans un tableau trié par ordre alphabetiqu
    Par JulPop dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2005, 17h21
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

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