Câu trả lời:
% hash1 = (% hash1,% hash2) ## hoặc cái gì đó khác ... @ hash1 {key% hash2} = giá trị% hash2; ## hoặc với các tham chiếu ... $ hash_ref1 = {% $ hash_ref1,% $ hash_ref2};
undef
, số không, chuỗi rỗng false
,, falsy ...)1 * (còn gọi là mảng kết hợp , còn gọi là từ điển )
%hash1 = (%hash1, %hash2)
$hash_ref1
thành $hash_ref2
, không hợp nhất. Bạn muốn $hash_ref1 = { %$hash_ref1, %$hash_ref2 };
, tôi sẽ chỉnh sửa câu trả lời.
Kiểm tra perlfaq4: Làm cách nào để hợp nhất hai hàm băm . Có rất nhiều thông tin tốt đã có trong tài liệu Perl và bạn có thể có nó ngay lập tức thay vì đợi người khác trả lời. :)
Trước khi bạn quyết định hợp nhất hai hàm băm, bạn phải quyết định phải làm gì nếu cả hai hàm băm chứa các khóa giống nhau và nếu bạn muốn giữ nguyên các hàm băm ban đầu.
Nếu bạn muốn giữ nguyên các hàm băm ban đầu, hãy sao chép một hàm băm (% hash1) sang một hàm băm mới (% new_hash), sau đó thêm các khóa từ hàm băm khác (% hash2 vào hàm băm mới. Kiểm tra xem khóa đã tồn tại trong% new_hash chưa cho bạn cơ hội quyết định phải làm gì với các bản sao:
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};
}
}
Nếu bạn không muốn tạo một băm mới, bạn vẫn có thể sử dụng kỹ thuật lặp này; chỉ cần thay đổi% new_hash thành% 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};
}
}
Nếu bạn không quan tâm đến việc một băm này ghi đè các khóa và giá trị từ băm kia, bạn có thể chỉ cần sử dụng một lát băm để thêm một băm này vào một băm khác. Trong trường hợp này, các giá trị từ% hash2 thay thế các giá trị từ% hash1 khi chúng có các khóa chung:
@hash1{ keys %hash2 } = values %hash2;
Đây là một câu hỏi cũ, nhưng xuất hiện cao trong tìm kiếm Google của tôi về 'mã băm hợp nhất perl' - và nó không đề cập đến mô-đun CPAN rất hữu ích Hash :: Merge