Bonjour , j ai deux listes
@arrive=(16,17,18,19);
@trouve=(16,19);
ce que je cherche c est de faire la comparaison entre les deux listes et avoir une troisieme liste qui contient que 17et 18.
si vous pouvez m aider .
la programmation est en perl .
merci
Publicité
Posté le 25-09-2007 à 10:19:13
matafan
Posté le 25-09-2007 à 12:45:06
En utilisant un hash :
#!/usr/bin/perl -w
use strict;
my @arrive=(16,17,18,19);
my @trouve=(16,19);
my %h;
map { $h{$_} = 1 } @trouve;
my @diff = grep { !$h{$_} } @arrive;
pour matafan :
est ce que je peux avoir svp une explication de ça :
map { $h{$_} = 1 } @trouve; my @diff = grep { !$h{$_} } @arrive;
map évalue une expression pour tous les éléments d'une liste : http://perldoc.perl.org/functions/map.html. Ici, on ajoute dans la hashmap une clé pour chaque élément de la liste, et on associe 1 à cette clé.
grep extrait d'une liste les éléments qui v&rifient une certaine condition : http://perldoc.perl.org/functions/grep.html. Ici, on ne veut récupérer que les éléments qui ne sont pas des clés de la hashmap, i.e. qui n'étaient pas dans la première liste.