简体   繁体   English

如何在perl中的hash哈希中执行通用值的键合并

[英]how to perform merging of keys for common values in hash of hash in perl

I am working on a below hash of hashes in perl, wherein i have some values in inner hash that are same for different key timestamps. 我正在perl中的哈希散列下面工作,其中我在内部散列中具有一些对于不同键时间戳相同的值。 Is there any way to merge the timestamp keys for similar values? 有什么办法可以合并时间戳键以获得相似的值?

'Test Responder Data String' => { 
                        '2018-01-26' => 'zzz00175002802;newData1',
                        '2018-01-20' => 'xxy00171329968;data1',
                        '2018-01-27' => 'xxy00171329968;data1',
                        '2018-01-28' => 'xxy00171329968;data1'
                        '2018-01-04' => 'www00171510082;ResponderData',
                        '2018-01-17' => 'rrr00175002256;try data',
                        '2018-01-05' => 'aaa00175033226;response try', 
                        '2018-01-08' => 'aaa00175033226;response try'
                       }

Expected Result: 预期结果:

'Test Responder Data String' => { 
                        '2018-01-26'                       => 'zzz00175002802;newData1',
                        '2018-01-20,2018-01-27,2018-01-28' => 'xxy00171329968;data1',
                        '2018-01-04'                       => 'www00171510082;ResponderData',
                        '2018-01-17'                       => 'rrr00175002256;try data',
                        '2018-01-05,2018-01-08'            => 'aaa00175033226;response try'                                                                                 
                       }
my %h=(
    '2018-01-26' => 'zzz00175002802;newData1',
    '2018-01-20' => 'xxy00171329968;data1',
    '2018-01-27' => 'xxy00171329968;data1',
    '2018-01-28' => 'xxy00171329968;data1',
    '2018-01-04' => 'www00171510082;ResponderData',
    '2018-01-17' => 'rrr00175002256;try data',
    '2018-01-05' => 'aaa00175033226;response try', 
    '2018-01-08' => 'aaa00175033226;response try'
);
my %t;
push @{ $t{ $h{$_} } }, $_ for keys %h;

my %result = map { join(",", @{$t{$_}}) => $_ } keys %t;

use Data::Dumper; print Dumper \%result;

output 输出

$VAR1 = {
      '2018-01-17' => 'rrr00175002256;try data',
      '2018-01-05,2018-01-08' => 'aaa00175033226;response try',
      '2018-01-26' => 'zzz00175002802;newData1',
      '2018-01-04' => 'www00171510082;ResponderData',
      '2018-01-27,2018-01-20,2018-01-28' => 'xxy00171329968;data1'
    };

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM