如何在Perl中使用map来编写字数统计代码?

时间:2013-01-24 02:30:15

标签: perl

我的示例数据:

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"
}

工作正常。我最近学习了grepmapsort,但不太了解。我尝试在一行中使用多个map编写上面的代码。不成功。

你能告诉我怎么样吗?

感谢。

2 个答案:

答案 0 :(得分:2)

map转换列表。你没有要改造的清单。

grep过滤列表。您无需过滤任何内容。

sort排序。您可以使用它来对输出进行排序。 (如果您对输出进行排序时遇到问题,请随时询问有关它的问题。请务必提供问题描述以及演示。)

答案 1 :(得分:2)

这是你的意思吗?

玩这个游戏可能很有趣,但你应该总是去清楚花哨的编码。 mapgrep很少比同等的for循环快得多,并且可以消耗更多的内存。

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