- 论坛徽章:
- 307
|
再来,- #!/usr/bin/perl
- use strict;
- use warnings;
- sub get_min_item{
- my ($luck, $hash, %hData, @aData, $minDate) = (@_);
- foreach my $k (keys %$hash){
- my ($num, $item) = map {$_, $hash->{$k}{$_}} sort {$a <=> $b} keys %{$hash->{$k}};
- push (@aData, [$k, $num, @$item{'px', 'dt'}]);
- }
- my ($px, $dt);
- foreach my $item (grep {$minDate = $_->[-1] if (!$minDate); $minDate eq $_->[-1]} sort {$a->[-1] <=> $b->[-1] and $a->[1] <=> $b->[1]} @aData){
- ($px, $dt) = @{$item}[2, -1] if (!$px);
- if ($item->[0] eq uc ($luck)){
- ($px, $dt) = @{$item}[2, -1];
- last;
- }
- }
- ($px, $dt);
- }
- my $hash1 = +{
- 'CSH' => { '3' => {'px' => 20, 'dt' => '20161221'}, '4' => {'px' => 10, 'dt' => '20161221'} },
- 'OTH' => { '1' => {'px' => 30, 'dt' => '20161221'}, '2' => {'px' => 40, 'dt' => '20171221'} },
- 'ABC' => { '2' => {'px' => 10, 'dt' => '20191221'}, '3' => {'px' => 25, 'dt' => '20201221'} },
- };
- my $hash2 = +{
- 'OTH' => {'1' => {'px' => 30, 'dt' => '20161221'}, '2' => {'px' => 40, 'dt' => '20171221'}},
- 'ABC' => {'2' => {'px' => 10, 'dt' => '20191221'}, '3' => {'px' => 25, 'dt' => '20201221'}},
- };
- printf("'px' = %d, 'dt' = '%d'\n",get_min_item ('csh', $_)) for ($hash1, $hash2);
复制代码 |
|