Supprimer les doublons dans un tableau Perl.

Vous souhaitez récupérer des valeurs d'un tableau, mais certaines sont en double. Vous ne souhaitez pas dupliquer l'information. Le but est donc de trouver un moyen de supprimer les doublons. Je vais vous présenter une solution qui n'est certainement pas la plus rapide ou la meilleur, mais la plus direct auquel on pense en premier. En Perl on utilise généralement un hash pour répondre à ce genre de problème. Nous allons suivre cette méthode et utiliser un hash qui va s'occuper de mémoriser les éléments déjà rencontré. Je vais montrer un exemple de code et l'expliquerai après (( Le code source est tiré du Perl Cookbook )).
  #Tableau d'origine
  my @tab = ('la', 'toi', 'la', 'si', 'ba', 'ben', 'la');
  
  #Déclaration d'un hash vide qui contiendra les élément déjà rencontré
  #et d'un tableau vide qui contiendra le résultat.
  my %deja_vu = ();
  my @uniques = ();
  
  #Parcours du tableau
  foreach my $objet (@tab) { 
      #Si la valeur n'est pas déjà dans le hash deja_vu
      unless($deja_vu) {
          #Stocke la valeur de l'itération comme clé dans
          #le hash deja_vu 
          $deja_vu = 1 ;
          #Stocke la valeur dans le tableau uniques
          push(@uniques, $objet);
      }
  }
  print "Tableau avec des doublons (@tab)", "\n";
  print "Tableau sans doublons (@uniques)", "\n";
La deuxième ligne contient notre tableau de départ. On peut constater qu'on rencontre certaines valeurs plusieurs fois notamment la valeur la, qui est présente trois fois. A la ligne 6 nous déclarons et initialisation un hash vide qui contiendra comme clé les valeurs déjà rencontrés. Ligne 7 nous déclarons et initialisation un tableau vide qui sera le tableau final, dans lequel on va ajouter la valeur si elle n'est pas déjà connu. Ligne 12 nous avons une condition qui test si la valeur du tableau n'existe pas déjà dans le hash, si elle n'existe pas on rentre dans la condition. Ce qui signifie qu'à la première itération il va tester si la valeur la est déjà une clé du hash deja_vu, elle ne l'ait pas on rentre donc dans la condition, mais à la troisième itération on a de nouveau la valeur la, elle est déjà présente dans le hash on ne rentre donc pas dans la condition. Ligne 15 on insère la valeur comme clé. Pour la première itération nous allons donc stocker la clé la :
    la => 1,
A la ligne 17 on ajoute la valeur à la fin du tableau avec la fonction push. Pour la première itération nous allons donc ajouter la valeur la au tableau uniques. La deuxième itération va ajouter toi elle sera ajouté après l'élément la à l'indice 1, et ainsi de suite. Nous allons donc retrouver le même structure que le tableau de départ, les valeurs seront stockés dans le même ordre avec les doublons en moins. Dans les deux dernière lignes nous affichons les deux tableaux trié et non trié. En conclusion ceci est un exemple, il en existe d'autres, mais cette solution fait partie de celle qui répondra à votre problème.
Vus : 2414
Publié par Hobbestigrou : 195