両方のハッシュを組み合わせて %hash1 にする最善の方法は何ですか? %hash2 と %hash1 には常に一意のキーがあることを常に知っています。可能であれば、1 行のコードも希望します。
$hash1{'1'} = 'red';
$hash1{'2'} = 'blue';
$hash2{'3'} = 'green';
$hash2{'4'} = 'yellow';
両方のハッシュを組み合わせて %hash1 にする最善の方法は何ですか? %hash2 と %hash1 には常に一意のキーがあることを常に知っています。可能であれば、1 行のコードも希望します。
$hash1{'1'} = 'red';
$hash1{'2'} = 'blue';
$hash2{'3'} = 'green';
$hash2{'4'} = 'yellow';
%hash1 = (%hash1, %hash2) ## または ... @hash1{keys %hash2} = 値 %hash2; ## または参照付き ... $hash_ref1 = { %$hash_ref1, %$hash_ref2 };
undef
ゼロ、空の文字列false
、、偽物 ...)perlfaq4: How do I merge two hashes を確認してください。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;