2017-08-02 3 views
0

キーが時刻インスタンスであり、値が処理時間(ミリ秒)です。私は、ユーザーが時間値を入力して、入力された時間よりも前にすべての処理時間の平均を取得するという解決策に取り組んでいます。平均計算によるハッシュのソートと操作

例:ユーザーが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', 
     }; 
+0

あなたはどのような問題を持っていますか? 'keys(%$ VAR1)'はあなたにキーのリストを与えます。文字列の比較( '$ _ lt '07:47:42'')は、興味のある時刻を識別するのに十分です。ミリ秒数を抽出するには、 'substr($ _、0、-2)'を使用します。 – ikegami

答えて

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; 
+0

池上さん、ありがとうございます。コードスニペットはとてもうまく簡潔に動作します。ありがとうございました! – ran1n