我想在Perl中表示一個集合。我最常做的用一些虛值的哈希,例如:如何在Perl中表示集合?
my %hash=();
$hash{"element1"}=1;
$hash{"element5"}=1;
然後使用if (defined $hash{$element_name})
來決定一個元素是否是在集。
這是常見的做法嗎?任何改善這個問題的建議?
此外,我應該使用defined
或exists
?
謝謝
我想在Perl中表示一個集合。我最常做的用一些虛值的哈希,例如:如何在Perl中表示集合?
my %hash=();
$hash{"element1"}=1;
$hash{"element5"}=1;
然後使用if (defined $hash{$element_name})
來決定一個元素是否是在集。
這是常見的做法嗎?任何改善這個問題的建議?
此外,我應該使用defined
或exists
?
謝謝
在CPAN上使用衆多Set模塊之一。從你的例子來看,Set::Light
或Set::Scalar
似乎是合適的。
我能捍衛這個建議與普遍觀點親CPAN(不考慮可能的協同效應)。
很少事實證明,在開始選擇一個模塊是錯誤的選擇。
這就是我一直這樣做的。我傾向於使用exists
而不是defined
,但他們都應該在這種情況下工作。
是的,構建散列集是一種常見的習慣用法。需要注意的是:
my @keys = qw/a b c d/;
my %hash;
@hash{@keys} =();
優選使用1
作爲值因爲undef
佔用顯著更少的空間。這也迫使你使用exists
(無論如何這是正確的選擇)。
+1謝謝。請參閱有關「深層次」的相關問題:http://stackoverflow.com/questions/3700069/how-to-check-if-a-key-exists-in-a-deep-perl-hash – 2010-09-13 11:54:27
除了開銷之外,還有什麼東西給你嗎?設置操作還是什麼?如果我所做的只是檢查一個集合中是否存在某個項目,爲什麼我會使用一個庫來執行某種語言已經非常好的語言? – 2010-09-13 11:49:14
關於支持集合集的模塊的任何建議? – 2010-09-13 11:52:51
Set的集合聽起來像是一個Set :: Object的作業,它的實例可以嵌套。 – daxim 2010-09-13 12:35:23