Comment puis-je représenter des ensembles en Perl?
Je voudrais représenter un ensemble en Perl. Ce que j'ai l'habitude de le faire est d'utiliser une table de hachage avec une certaine valeur factice, par exemple:
my %hash=();
$hash{"element1"}=1;
$hash{"element5"}=1;
Ensuite utiliser if (defined $hash{$element_name})
de décider si un élément est dans le jeu.
Est-ce une pratique courante? Toutes les suggestions sur l'amélioration de cette?
Aussi, dois-je utiliser defined
ou exists
?
Merci
Vous devez vous connecter pour publier un commentaire.
Utiliser l'un des nombreux Ensemble des modules sur CPAN. À en juger par votre exemple,
Set::Light
ouSet::Scalaire
semblent appropriées.Je peux défendre ce conseil avec les arguments habituels pro CPAN (sans tenir compte des possibles effets de synergie).
Rarement, il s'avère que la cueillette d'un module au début est le mauvais choix.
$set->insert('foo')
fait que vous êtes à l'insertion de " foo " dans un ensemble.$hash{foo} = 1
dirait que vous êtes la cartographie foo pour 1, vous ne l'êtes pas. Ajouter au mélange de l'adhésion les tests, pour qui a défini et existe aussi bien, et les choses peuvent devenir source de confusion lorsque vous commencer à mélanger les deux. Ou lorsque vous commencez à utiliser = 0 pour supprimer quelque chose de la série, mais utilisez existe vérifie quelque part. Fondamentalement, en utilisant une table de hachage comme un ensemble est difficile à lire et difficile à maintenir. Et oh ouais, Set::l'Objet est plus rapide que les tables de hachage.Oui, bâtiment de hachage jeux de cette manière est une commune de l'idiome. Remarque:
est préférable à l'utilisation
1
comme la valeur, carundef
prend nettement moins de place. Cela vous force à utiliseexists
(qui est le bon choix de toute façon).Que la manière dont je l'ai toujours fait. J'aurais tendance à utiliser
exists
plutôt quedefined
mais ils doivent tous travailler dans ce contexte.