2

我希望我的数组成为我的新哈希的键。我正在编写一个计算文档中单词出现次数的程序。

my @array = split(" ", $line);

keys my %word_count = @array; #This does nothing

当我逐行读取 infile 时,会发生此段。我正在尝试找到一种使用哈希来完成这个项目的方法。单词是键,出现的次数是值。但是,这一步尤其让我感到困惑。

4

4 回答 4

5

使用散列片

my %word_count;
@word_count{split ' ', $line} = ();

# if you like wasting memory:
# my @array = split ' ', $line;
# @word_count{@array} = (0) x @array;
于 2012-04-11T00:30:58.730 回答
2

你不能那样做,当然。

my %word_count = map {($_, 0)} @array;

将初始化散列的键;但通常在 Perl 中你不想这样做。这里有两个问题是

  1. 您需要第二遍才能真正解释该行中的单词;
  2. 您不能作弊并将其更改01上述内容,因为如果在该行中重复一个单词,您只会计算一次,其他单词将被覆盖。
于 2012-04-11T00:21:14.360 回答
0
my %word_count = map { $_ => 0 } split(" ", $line);
于 2012-04-11T00:18:36.817 回答
0

您正在尝试计算一行中单词的出现次数,对吗?如果是这样,你想要

my %word_count;
++$word_count for split(/\s+/, $line);

或者把它放在头上,以便于细化一个词的定义:

my %word_count;
++$word_count for $line =~ /(\S+)/g;
于 2012-04-11T03:23:35.777 回答