我想在Perl中表示一个集合。我通常做的是使用带有一些虚拟值的散列,例如:
my %hash=();
$hash{"element1"}=1;
$hash{"element5"}=1;
然后使用if (defined $hash{$element_name})
来确定元素是否在集合中。
这是一种常见做法吗?有关改进的建议吗?
另外,我应该使用defined
还是exists
?
谢谢
答案 0 :(得分:45)
是的,以这种方式构建哈希集是一种常见的习惯用法。请注意:
my @keys = qw/a b c d/;
my %hash;
@hash{@keys} = ();
最好使用1
作为值,因为undef
占用的空间要少得多。这也迫使你使用exists
(无论如何都是正确的选择)。
答案 1 :(得分:13)
在CPAN上使用众多Set模块之一。从您的示例来看,Set::Light
或Set::Scalar
似乎是恰当的。
我可以用CPAN的常规论据来辩护这个建议(无视可能的协同效应)。
很少会发现在开始时选择模块是错误的选择。
答案 2 :(得分:1)
这就是我一直这样做的方式。我倾向于使用exists
而不是defined
,但它们都应该在这种情况下工作。