両方のハッシュを%hash1に結合する最良の方法は何ですか? %hash2と%hash1には常に一意のキーがあることを常に知っています。また、可能であれば、1行のコードを好むでしょう。
$hash1{'1'} = 'red';
$hash1{'2'} = 'blue';
$hash2{'3'} = 'green';
$hash2{'4'} = 'yellow';
%hash1 =(%hash1、%hash2) ##または... @ hash1 {キー%hash2} =値%hash2; ##または参照あり... $ hash_ref1 = {%$ hash_ref1、%$ hash_ref2};
undef
、ゼロ、空の文字列、false
、falsy ...)perlfaq4:2つのハッシュをマージする方法 を確認してください。 Perlのドキュメントにはすでに多くの優れた情報があり、他の誰かが答えるのを待つのではなく、すぐにそれを手に入れることができます。 :)
2つのハッシュをマージすることを決定する前に、両方のハッシュに同じキーが含まれていて、元のハッシュをそのまま残したい場合にどうするかを決定する必要があります。
元のハッシュを保持する場合は、1つのハッシュ(%hash1)を新しいハッシュ(%new_hash)にコピーしてから、他のハッシュ(%hash2)のキーを新しいハッシュに追加します。キーが%new_hashに既に存在することを確認します重複をどうするかを決める機会を与えてくれます:
my %new_hash = %hash1; # make a copy; leave %hash1 alone
foreach my $key2 ( keys %hash2 )
{
if( exists $new_hash{$key2} )
{
warn "Key [$key2] is in both hashes!";
# handle the duplicate (perhaps only warning)
...
next;
}
else
{
$new_hash{$key2} = $hash2{$key2};
}
}
新しいハッシュを作成したくない場合でも、このループ手法を使用できます。 %new_hashを%hash1に変更するだけです。
foreach my $key2 ( keys %hash2 )
{
if( exists $hash1{$key2} )
{
warn "Key [$key2] is in both hashes!";
# handle the duplicate (perhaps only warning)
...
next;
}
else
{
$hash1{$key2} = $hash2{$key2};
}
}
あるハッシュが他のハッシュのキーと値を上書きすることを気にしない場合は、ハッシュスライスを使用して、あるハッシュを別のハッシュに追加できます。この場合、共通のキーがある場合、%hash2の値が%hash1の値を置き換えます。
@hash1{ keys %hash2 } = values %hash2;
これは古い質問ですが、「Perl merge hashes」のGoogle検索で高く出ていますが、非常に役立つCPANモジュールについては言及していません Hash :: Merge
ハッシュ参照用。次のような中括弧を使用する必要があります。
$hash_ref1 = {%$hash_ref1, %$hash_ref2};
およびnot括弧を使用した上記の提案された答え:
$hash_ref1 = ($hash_ref1, $hash_ref2);