Je voudrais représenter un ensemble en Perl. Ce que je fais habituellement, c'est utiliser un hachage avec une valeur fictive, par exemple:
my %hash=();
$hash{"element1"}=1;
$hash{"element5"}=1;
Ensuite, utilisez if (defined $hash{$element_name})
pour décider si un élément est dans l'ensemble.
Est-ce une pratique courante? Des suggestions pour améliorer cela?
Aussi, dois-je utiliser defined
ou exists
?
Je vous remercie
Utilisez l'un des nombreux modules Set sur CPAN. À en juger par votre exemple, Set::Light
ou Set::Scalar
semblent appropriés.
Je peux défendre ce conseil avec les arguments habituels pro CPAN (sans tenir compte des éventuels effets de synergie).
Il s'avère rarement que choisir un module au début est un mauvais choix.
Oui, créer des ensembles de hachage de cette manière est une expression courante. Notez que:
my @keys = qw/a b c d/;
my %hash;
@hash{@keys} = ();
est préférable à l'utilisation de 1
comme valeur car undef
occupe beaucoup moins d'espace. Cela vous oblige également à utiliser exists
(ce qui est de toute façon le bon choix).
C'est comme ça que je l'ai toujours fait. J'aurais tendance à utiliser exists
plutôt que defined
mais ils devraient tous les deux fonctionner dans ce contexte.