Мне нужно использовать цикл foreach для сравнения двух массивов хешей.но я не знаю, как это сделать.
мои исходные данные:
NewData(file 1)
Puma
77777 33333 44444 55555
Adidas
99999 88888 55555 77777
22222 11111 33333 44444
Brooks
11111 22222 33333 44444
33333 44444 55555 66666
OldData(file 2)
Puma
77777 33333 44444 55555
Adidas
11111 11111 33333 44444
99999 88888 55555 77777
Brooks
11111 22222 33333 44444
33333 44444 55555 66666
мой хэш1:
'Adidas' => {
'y1' => [
'88888',
'11111'
],
'x2' => [
'55555',
'33333'
],
'y2' => [
'77777',
'44444'
],
'x1' => [
'99999',
'22222'
]
},
'Puma' => {
'y1' => [
'33333'
],
'x2' => [
'44444'
],
'y2' => [
'55555'
],
'x1' => [
'77777'
]
},
'Brooks' => {
'y1' => [
'22222',
'44444'
],
'x2' => [
'33333',
'55555'
],
'y2' => [
'44444',
'66666'
],
'x1' => [
'11111',
'33333'
]
}
};
мой хэш2:
$VAR1 = {
'Adidas' => {
'y1' => [
'11111',
'88888'
],
'x2' => [
'33333',
'55555'
],
'y2' => [
'44444',
'77777'
],
'x1' => [
'11111',
'99999'
]
},
'Puma' => {
'y1' => [
'33333'
],
'x2' => [
'44444'
],
'y2' => [
'55555'
],
'x1' => [
'77777'
]
},
'Brooks' => {
'y1' => [
'22222',
'44444'
],
'x2' => [
'33333',
'55555'
],
'y2' => [
'44444',
'66666'
],
'x1' => [
'11111',
'33333'
]
}
};
мой код попытки для сопоставления и несопоставление:
foreach my $newq (keys %hash1)
{
foreach my $oldq(keys %hash2)
{
if ( $newq eq $oldq)
{
foreach my $newx1(@{$hash1{$newq}{x1}})
{
foreach my $oldx1(@{$hash2{$oldq}{x1}})
{
if ($newx1 == $oldx1)
{
print "$newq\t$newx1\t$oldx1\n";
}
if ($newx1 != $oldx1)
{
print "$newq\t$newx1\t$oldx1\n";
}
}
мой вывод для сопоставления
New Old
Adidas 99999 99999
Puma 77777 77777
Brooks 11111 11111
Brooks 33333 33333
мой вывод для сопоставления:
New Old
Adidas 99999 11111
Adidas 22222 11111
Adidas 22222 99999
Brooks 11111 33333
Brooks 33333 11111
желаемый вывод для сопоставления:
New Old
Puma 77777 33333 44444 55555 77777 33333 44444 55555
Adidas 99999 88888 55555 77777 99999 88888 55555 77777
Brooks 11111 22222 33333 44444 11111 22222 33333 44444
Brooks 33333 44444 55555 66666 33333 44444 55555 66666
Not matching
Adidas 22222 11111 33333 44444 11111 11111 33333 44444
Теперь я могу получить правильное соответствие для x1.Но я получаю неправильный вывод для «несоответствия».мой ожидаемый вывод для «несоответствия» - Adidas 22222 11111
только потому, что 'x1=> 99999'
представлен как в новых, так и в старых данных.И я не уверен, как продолжить с 'y1, x2 и y2' ...