-2

私のサンプルデータ:

1 2 A
1 2 3 B
1 A
1 2 3 C
1 3 A
1 3 B

最後の単語の数を数えたい

私のPerlコード:

my %tmp;
while(<>) {
    chomp;
    my $last=(split)[-1];
    $tmp{$last}++;
}
while(my ($k,$v)=each %tmp){
    print "$k=>$v\n"
}

正常に動作します。私は最近、、、を学びましたがgrep、よく理解していません。私は1行にいくつかを使用して上記のコードを書こうとしました。成功しません。mapsortmap

方法を教えていただけませんか?

ありがとう。

4

2 に答える 2

2

mapリストを変換します。変換するリストがありません。

grepリストをフィルタリングします。何もフィルタリングする必要はありません。

sortソートします。これを使用して、出力を並べ替えることができます。(出力のソートに問題がある場合は、お気軽に質問してください。問題の説明とそのデモを必ず含めてください。)

于 2013-01-24T04:40:45.227 に答える
2

こういうことですか?

遊ぶのは楽しいかもしれませんが、凝ったコーディングよりも常に明確にする必要があります。同等のループよりも大幅に高速になることはめったになく、mapはるかに多くのメモリを使用する可能性があります。grepfor

use strict;
use warnings;

my %tmp;
$tmp{$_}++ for map { (split)[-1] } <>;
print for map "$_ => $tmp{$_}\n", sort keys %tmp;

出力

A => 3
B => 2
C => 1
于 2013-01-24T09:36:43.980 に答える