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 :

Intervertir les lignes d'un tableau [perl6]


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 164
    Points : 154
    Points
    154
    Par défaut Intervertir les lignes d'un tableau
    Bonjour,

    Je souhaite intervertir les lignes d'un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Titi
    Toto
    kouign
    Perl6
    vim
    computer
    amann
    radis
    Et donc de passer la ligne 7 à la ligne 4 comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Titi
    Toto
    kouign
    amann
    Perl6
    vim
    computer
    radis
    Après avoir créé mon tableau, je ne sais pas trop quoi faire:

    Existe t-il une méthode du style @Tb.move(7,4) qui déplace la ligne 7 à la ligne 4

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    si tu parles bien d'un tableau (et non d'un fichier), alors la fonction splice fait certainement ce que tu cherches à faire.

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 164
    Points : 154
    Points
    154
    Par défaut
    Merci,

    Je regarde ça de plus près.

  4. #4
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 164
    Points : 154
    Points
    154
    Par défaut
    Voila, cela fonctionne. Je vous mets la fonction au cas ou quelqu'un en aurais besoin.

    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
    22
    23
    sub move (@TB , Int $Start , Int $End , $deplace){
    	my Int $i;
    	my @transition;
    	my @retour;
    	if $Start > $End {
    		$i = $Start;
    		$Start = $End;
    		$End = $i;
    	}
    	@transition = @TB.splice($Start -1 , $End - $Start -1);
    	$i=0;
    	for @TB {
    		if $i != $deplace - 1 { @retour.push($_);} else {
    			@retour.push(' ');
    			for @transition -> $t {@retour.push($t);}
    			@retour.push(' ');
    			@retour.push($_);
    		}
    		$i++;
    	}
    	#for @retour {say $_;}
    	return @retour,
    }
    Il faut mettre en argument le tableau source @TB, le début de la partie à déplacer $Start, la fin $End et enfin ou mettre la partie à déplacer $deplaceOn peut certainement améliorer cela. Notament, je ne suis pas sur que cela fonctionne en voulant déplacer vers la fin.

    J'aurais bien voulu créer une méthode pour pouvoir l'utiliser comme cela @Tb.move($Start , $End , $deplace)Mais, je suis pas sur que ce soit possible

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pour intervertir deux éléments, il y a plus simple que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	if $Start > $End {
    		$i = $Start;
    		$Start = $End;
    		$End = $i;
    	}
    En fait, il n'y a pas besoin de la variable temporaire $i, il suffit d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ($Start, $End) = ($End, $Start) if $Start > $End;
    Sinon, voici sous le REPL un exemple de code utilisant deux fois splice pour faire le déplacement d'un élément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > say @tb
    [Titi Toto kouign Perl6 vim computer amann radis]
    > my $elem = splice @tb, 6, 1;         # enlève l'élément numéro 6 du tableau et le renvoie dans la variable $elem
    [amann]
    > say @tb
    [Titi Toto kouign Perl6 vim computer radis]
    > splice  @tb, 3, 0, $elem;            # insère l'élément récupéré en position 4
    []
    > say @tb
    [Titi Toto kouign amann Perl6 vim computer radis]
    >
    Voici une fonction move qui doit faire à peu près ce que tu recherches si j'ai bien compris (déplacer un élément de la position $start vers la position $end) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub move (@tab, Int $start, Int $end) {
        my $elem = splice @tab, $start, 1;
        splice  @tab, $end, 0, $elem;
    }
    A l'utilisation sous le REPL, cela donne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    > my @tb = < Titi Toto kouign Perl6 vim computer amann radis>;
    [Titi Toto kouign Perl6 vim computer amann radis]
    > move @tb, 6, 3;
    []
    > say @tb
    [Titi Toto kouign amann Perl6 vim computer radis]
    >

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

Discussions similaires

  1. Intervertir deux lignes d'un tableau
    Par metalcoyote dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/01/2007, 17h06
  2. Cacher les lignes de mon tableau
    Par Kyvin dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/09/2006, 16h11
  3. [Tableaux] lien sur les lignes d'un tableau
    Par einsteineuzzz dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2006, 14h16
  4. changement de couleur sur les lignes d'un tableau
    Par brasco06 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 13/04/2006, 18h03
  5. Espacement entre les ligne d'un tableau
    Par Flobel dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 02/11/2004, 09h33

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