我创建了一个%hash_1
'PIOMUX2_UART_10' => 'PIO_M_U_PIO1_0'
'PIOMUX_UART_11' => 'PIO_M_U_PIO0_4'
'PIOMUX_UART_2' => 'PIO_M_U_PIO23_3'
'PIOMUX_UART_0' => 'PIO_M_U_PIO21_0'
和另一个%hash_2
'PIO_M_U_PIO1_0' => 244
'PIO_M_U_PIO0_4' => 567
'PIO_M_U_PIO23_3' => 568
'PIO_M_U_PIO21_0' => 748
'PIO_M_U_PIO23_3' => 099
'PIO_M_U_PIO23_3', => 887
hash_1
中的键值是hash_2
中键的子集。我只想知道是否有任何方法可以将hash_1
的键直接指向hash_2
的值,并创建另一个hash_3
,其中hash_1
的键可以与相应的匹配来自hash_2
的值。
答案 0 :(得分:2)
不确定。你需要的只是一些哈希切片。 (但请注意,您的%hash_2
实际上只有四个元素,因为您的三个键是相同的。)
use strict;
use warnings;
my %hash_1 = (
PIOMUX2_UART_10 => "PIO_M_U_PIO1_0",
PIOMUX_UART_0 => "PIO_M_U_PIO21_0",
PIOMUX_UART_11 => "PIO_M_U_PIO0_4",
PIOMUX_UART_2 => "PIO_M_U_PIO23_3",
);
my %hash_2 = (
PIO_M_U_PIO1_0 => 244,
PIO_M_U_PIO0_4 => 567,
PIO_M_U_PIO23_3 => 568,
PIO_M_U_PIO21_0 => 748,
PIO_M_U_PIO23_3 => '099',
PIO_M_U_PIO23_3 => 887,
);
my %hash_3;
@hash_3{keys %hash_1} = @hash_2{values %hash_1};
use Data::Dump;
dd \%hash_3;
<强>输出强>
{
PIOMUX2_UART_10 => 244,
PIOMUX_UART_0 => 748,
PIOMUX_UART_11 => 567,
PIOMUX_UART_2 => 887,
}
答案 1 :(得分:1)
首先查找%hash_1
的{{1}}值,然后将%hash_2
键映射到%hash_1
值,
%hash_2
输出
my %hash_3 = map { $_ => $hash_2{$hash_1{$_}} }
grep { exists $hash_2{$hash_1{$_}} }
keys %hash_1;
use Data::Dumper; print Dumper \%hash_3;