配列のハッシュのハッシュがあります。ハッシュのキーは$duration
と$attr
です。$b <=> $a
降順で並べ替えて、期間が等しい重複値のみを削除したいと考えています。スニペットでは、これらはストリームである必要があります。
'h264/AVC, 1080p24 /1.001 (16:9)' & 'AC3, English, multi-channel, 48kHz'
$ duration &'26'
の重複値ではありません。'2124'
'115'
重複を削除する例は無数にあり、自分のニーズに合わせて実装するために見つけたすべてを試しましたが、成功しませんでした。解決策に対する私のアプローチはどうあるべきですか。ありがとう。
my ( %recordings_by_dur_attr ) = ();
push( @{ $recordings_by_dur_attr{ $duration }{ $attr } }, @stream );
print Data::Dumper->Dump( [\%recordings_by_dur_attr] );
結果:
$VAR1 = {
'2124' => {
'00300.mpls, 00-35-24' => [
'',
'h264/AVC, 480i60 /1.001 (16:9)',
'AC3, English, stereo, 48kHz'
]
},
'50' => {
00021.mpls, 00-00-50' => [
'',
'h264/AVC, 1080p24 /1.001 (16:9)',
'AC3, English, multi-channel, 48kHz'
]
},
'6528' => {
'00800.mpls, 01-48-48' => [
'',
'Chapters, 18 chapters',
'h264/AVC, 1080p24 /1.001 (16:9)',
'DTS, Japanese, stereo, 48kHz',
'DTS Master Audio, English, stereo, 48kHz',
'DTS, French, stereo, 48kHz',
'DTS, Italian, stereo, 48kHz',
'DTS, German, stereo, 48kHz',
'DTS, Spanish, stereo, 48kHz',
'DTS, Portuguese, stereo, 48kHz',
'DTS, Spanish, stereo, 48kHz',
'DTS, Russian, stereo, 48kHz'
]
},
'26' => {
'01103.mpls, 00-00-26' => [
'',
'h264/AVC, 1080p24 /1.001 (16:9)',
'AC3, English, multi-channel, 48kHz'
],
'01102.mpls, 00-00-26' => [
'',
'h264/AVC, 1080p24 /1.001 (16:9)',
'AC3, English, multi-channel, 48kHz'
],
'00011.mpls, 00-00-26' => [
'',
'h264/AVC, 1080p24 /1.001 (16:9)',
'AC3, English, multi-channel, 48kHz'
]
},
'115' => {
'00304.mpls, 00-01-55' => [
'',
'h264/AVC, 480i60 /1.001 (16:9)',
'AC3, English, stereo, 48kHz'
]
}
};
重複構造
'',
'h264/AVC, 1080p24 /1.001 (16:9)',
'AC3, English, multi-channel, 48kHz'
重複した構造を削除した結果:
$VAR1 = {
'2124' => {
'00300.mpls, 00-35-24' => [
'',
'h264/AVC, 480i60 /1.001 (16:9)',
'AC3, English, stereo, 48kHz'
]
},
'50' => {
00021.mpls, 00-00-50' => [
'',
'h264/AVC, 1080p24 /1.001 (16:9)',
'AC3, English, multi-channel, 48kHz'
]
},
'6528' => {
'00800.mpls, 01-48-48' => [
'',
'Chapters, 18 chapters',
'h264/AVC, 1080p24 /1.001 (16:9)',
'DTS, Japanese, stereo, 48kHz',
'DTS Master Audio, English, stereo, 48kHz',
'DTS, French, stereo, 48kHz',
'DTS, Italian, stereo, 48kHz',
'DTS, German, stereo, 48kHz',
'DTS, Spanish, stereo, 48kHz',
'DTS, Portuguese, stereo, 48kHz',
'DTS, Spanish, stereo, 48kHz',
'DTS, Russian, stereo, 48kHz'
]
},
'26' => {
'00011.mpls, 00-00-26' => [
'',
'h264/AVC, 1080p24 /1.001 (16:9)',
'AC3, English, multi-channel, 48kHz'
]
},
'115' => {
'00304.mpls, 00-01-55' => [
'',
'h264/AVC, 480i60 /1.001 (16:9)',
'AC3, English, stereo, 48kHz'
]
}
};
後処理
for my $duration ( sort { $b <=> $a } keys %recordings_by_dur_attr ) {
for my $attr ( keys $recordings_by_dur_attr{ $duration } ) {
#Remove duplicate structures
my @stream = @{ $recordings_by_dur_attr{ $duration }{ $attr } };
my ( $mpls, $hms ) = ( $attr =~ /(\d+\.mpls), (\d+-\d+-\d+)$/ );
for ( my $i = 1; $i < @stream; $i++ ) {
#extract info from each stream
}
}
}