通过平均计算对哈希进行排序和操作

时间:2017-08-02 03:47:31

标签: perl

我有一个哈希,其键是时间实例,值是以毫秒为单位的处理时间。我正在研究一个解决方案,其中用户将输入一个时间值,作为回报,应该在输入时间之前获得所有处理时间的平均值。

示例:如果用户输入07:47:42,他应该得到按键的处理时间的平均值04:46:41,03:46:37,06:47:41,00:45:35,01:46 :05。

请建议如何执行此操作。我是否需要及时转换字符串,或者只能在字符串中完成。任何代码示例都会非常有用。谢谢!

$VAR1 = {
          '01:46:05' => '119.947ms',
          '11:47:47' => '165.916ms',
          '15:48:51' => '164.226ms',
          '19:50:22' => '159.873ms',
          '10:47:45' => '177.947ms',
          '04:46:41' => '174.613ms',
          '16:49:22' => '169.104ms',
          '00:45:35' => '122.289ms',
          '18:49:52' => '158.956ms',
          '06:47:41' => '145.969ms',
          '09:47:44' => '85.786ms',
          '12:48:16' => '132.169ms',
          '05:47:11' => '186.575ms',
          '03:46:37' => '131.529ms',
          '07:47:42' => '121.417ms',
          '21:50:55' => '171.268ms',
        };

1 个答案:

答案 0 :(得分:2)

sub sum { my $acc; $acc += $_ for @_; $acc }
sub avg { sum(@_) / @_ }

my $cutoff = '07:47:42';

my $result =
   avg
      map { substr($VAR1->{$_}, 0, -2) }
         grep { $_ lt $cutoff }
            keys %$VAR1;