Perlでセットを表現したいと思います。私が通常行うことは、いくつかのダミー値を持つハッシュを使用することです。例えば:
_my %hash=();
$hash{"element1"}=1;
$hash{"element5"}=1;
_
次に、if (defined $hash{$element_name})
を使用して、要素がセット内にあるかどうかを判断します。
これは一般的な方法ですか?これを改善するための提案はありますか?
また、defined
またはexists
を使用する必要がありますか?
ありがとうございました
CPANの多くのSetモジュールの1つを使用してください。あなたの例から判断すると、 Set::Light
または Set::Scalar
が適切と思われます。
このアドバイスは、CPANプロの通常の議論(相乗効果の可能性は無視)で守ることができます。
まれに、最初にモジュールを選択することが間違った選択であることが判明します。
はい、その方法でハッシュセットを構築することは一般的なイディオムです。ご了承ください:
my @keys = qw/a b c d/;
my %hash;
@hash{@keys} = ();
undef
は占有するスペースが大幅に少ないため、1
を値として使用するよりも望ましい方法です。これはまた、exists
(とにかく正しい選択です)を使用することを強制します。
それは私がいつもそれをした方法です。私はexists
ではなくdefined
を使用する傾向がありますが、どちらもこのコンテキストで機能するはずです。