19
2008
Comment supprimer les doublons d’une liste ou d’un tableau ?
Utilisez une table de hachage. Lorsque vous pensez à “unique” ou à “doublons”, pensez aux “clés de hachage”.
Si l’ordre des éléments ne compte pas, vous pouvez créer une table de hachage dont vous extrairez les clés. La manière de créer la table de hachage importe peu : il vous suffit d’utiliser keys
pour récupérer les éléments uniques.
my %hachage = map { $_, 1 } @tableau; # ou via une tranche de hachage : @hachage{ @tableau } = (); # ou via un foreach : $hachage{$_} = 1 foreach ( @tableau );
my @unique = keys %hachage;
Vous pouvez aussi parcourir tous les éléments et ne conservez que ceux que vous n’avez encore jamais vus. La première fois que la boucle traite un élément, cet élément n’a pas de clé correspondante dans %dejavu
. Le condition dans l’instruction commençant par next
crée cette clé et récupère immédiatement sa valeur (qui est undef
) avant de l’incrémenter. Comme cette valeur initiale est fausse, le next
n’a pas lieu et la boucle continue en exécutant le push
. Lorsque la boucle rencontre à nouveau le même élément, la clé correspondante existe dans la tableau de hachage et cette clé est vraie (puisque sa valeur incrémentée n’est plus undef), et donc le next interrompt cette itération et la boucle passe à l’élément suivant.
my @unique = (); my %dejavu = ();
foreach my $elem ( @tableau ) { next if $dejavu{ $elem }++; push @unique, $elem; }
Vous pouvez écrire cela de manière plus concise en utilisant grep, qui fera la même chose.
my %dejavu = (); my @unique = grep { ! $dejavu{ $_ }++ } @tableau;
Laissez un commentaire
Publicité :)
Articles récents
- Grep – Extraire toutes les adresses IP d’un fichier text, Json, etc…
- Failed to Start File System Check – Vcenter 7
- Powershell – Se connecter à l’active directory depuis un poste windows 11
- Powershell – Autoriser l’exécution de scripts non signés
- Powershell – Changer le domaine des adresses emails de tous les utilisateurs AD
Partenaires
Mot-clefs
Mes derniers tweets
-
RT @BSE_Anoss: Lancement de #Starwheels le 19 Juin à 20h30 sur twitch/oganoss ! C'est mon plus gros projet, j’espère que vous sere… https://t.co/NjLCKbaHXA