Este es el resultado que me gustaría obtener:
Using perl Syntax Highlighting
- HASH1 => { '2016-07-01' => { 'val1' => '7', 'val2' => '9', }, '2016-07-02' => { 'val1' => '10', 'val2' => '2', } }
- HASH2 => { '2016-07-01' => { 'val1' => '8', 'val2' => '4', }, '2016-07-03' => { 'val1' => '3', 'val2' => '2', } }
- HASH3 => { '2016-07-01' => { 'val1' => '6', 'val2' => '5', }, '2016-07-02' => { 'val1' => '1', 'val2' => '6', }, '2016-07-04' => { 'val1' => '4', 'val2' => '2', } }
- SALIDA:
- HASH => { '2016-07-01' => { 'val1' => '21', 'val2' => '18', }, '2016-07-02' => { 'val1' => '11', 'val2' => '8', }, '2016-07-03' => { 'val1' => '3', 'val2' => '2', }, '2016-07-04' => { 'val1' => '4', 'val2' => '2', }, }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Aquí mi intento de código para realizar la operación:
Empujo todas las claves duplicadas a un array para identificarlas y luego sumar los valores.
En este ejemplo estoy comparando 2 hashes, pero me gustaría hacerlo con múltiples. Ejemplo 3 en la misma función:
- my @common = ();
- foreach (keys %HASH1) {
- push(@common, $_) if exists $HASH2{$_};
- }
- foreach my $DUP_KEY (@common){
- my $v1 = $HASH1{$DUP_KEY}{'val1'} + $HASH2{$DUP_KEY}{'val1'};
- my $v2 = $HASH1{$DUP_KEY}{'val2'} + $HASH2{$DUP_KEY}{'val2'};
- $HASH1{$DUP_KEY}{'val1'} = $v1;
- $HASH1{$DUP_KEY}{'val2'} = $v2;
- }
- my %OUT_HASH = (%HASH1, %HASH2);
- foreach my $key (keys %OUT_HASH) {
- push(@ARR, $key);
- }
- foreach (sort @ARR) {
- push(@ARR_CLEAN, $_);
- }
Pero el resultado no es el esperado porque si repito el proceso con el HASH3 no me toma los valores de HASH2 en el hash de salida.
No doy con la operación correcta.
¿Alguien podría guiarme mejor? ¡Gracias!