두 해시를 % hash1에 결합하는 가장 좋은 방법은 무엇입니까? 저는 항상 % hash2와 % hash1에 고유 한 키가 있다는 것을 알고 있습니다. 가능하면 한 줄의 코드를 선호합니다.
$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
, 0, 빈 문자열 false
,, 허위 ...)%hash1 = (%hash1, %hash2)
$hash_ref1
됩니다 $hash_ref2
. 당신은 원한다 $hash_ref1 = { %$hash_ref1, %$hash_ref2 };
, 내가 대답을 편집 할 것이다.
perlfaq4 확인 : 두 개의 해시를 병합하는 방법 . Perl 문서에는 이미 많은 좋은 정보가 있으며 다른 사람이 대답하기를 기다리지 않고 바로 얻을 수 있습니다. :)
두 해시를 병합하기로 결정하기 전에 두 해시에 동일한 키가 포함되어 있고 원래 해시를 그대로 유지하려는 경우 수행 할 작업을 결정해야합니다.
원래 해시를 유지하려면 하나의 해시 (% 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에 대해서는 언급하지 않았습니다.