1

したがって、次のような特定の時間を追加しようとしています。

my @arr = ("stuff (00:04)", "more stuff (02:59)", "extra stuff (00:00)");

() は (HH:MM) HH= 時間、MM = 分としてフォーマットされます。だから私の考えは、このコードを使用して () の期間を抽出することです:

my @new_arr = grep (/\b\(\d:\d\)\b/, @arr);
foreach (@new_arr){
    print "$_";
}

しかし、私の正規表現は機能していません。

また、それらを追加する方法がわかりません。

何か提案はありますか?

4

4 に答える 4

2

情報を配列ではなくハッシュとして保存することをお勧めします。

my %times = ( 
    "stuff" => "00:04",
    "more stuff" => "02:59", 
    "extra stuff" => "00:00",
);

これで、次のように時間を取得できます。

my $stuff_var = "stuff";
print "It took $stuff $time{$stuff} to run\n";

データが配列にある場合は、m//正規表現を使用して解析できます。

my %times;
for my $time ( @arr ) {
    $time =~ /(.*)\s+(.+?)/;   # Parentheses mark stuff and time
    my $stuff = $1;
    my $time  = $2;
    $time{$stuff} = $time;
}

$timeこれで、タイムスタンプを含むハッシュが作成されました。時間と分を分けたい場合は、同じテクニックを使用します。ハッシュのハッシュを作成します:

my %times;
for my $item ( @arr ) {
    $itme =~ /(.*)\s+(.+?)/;   # Parentheses mark stuff and time
    my $stuff = $1;
    my $time  = $2;
    $time{$stuff}->{TIME} = $time;
    $time =~ /(.*):(.*)/;
    $time{$stuff}->{HOUR} = $1;
    $time{$stuff}->{MINUTE} = $2;
}

Now$time{$stuff}->{TIME}(HH:MM)、while$time{$stuff}->{HOUR}は時間、$time{$stuff}->{MINUTES}は分になります。

于 2013-10-15T14:30:43.807 に答える
0

追加情報です。grep 関数は、配列をフィルタリングするためだけに使用されます。したがって、マップ機能を使用するのが正しいオプションです。map 関数は、リストを要素ごとに変換するために使用されます。リストとコード ブロックが与えられると、map は元の対応する要素から派生した要素を使用して新しいリスト (またはハッシュ) を作成します。

于 2013-10-15T12:36:43.297 に答える