我可以使用数组的内容作为哈希的键吗?

时间:2012-04-11 00:13:12

标签: arrays perl

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

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

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

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

4 个答案:

答案 0 :(得分:5)

使用hash slice

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

# if you like wasting memory:
# my @array = split ' ', $line;
# @word_count{@array} = (0) x @array;

答案 1 :(得分:2)

当然,你不能这样做。

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

会初始化哈希的键;但通常在Perl你不想这样做。这里有两个问题是

  1. 您需要第二次传递才能帐户行中的字词;
  2. 你不能作弊并将上面的0更改为1,因为如果在该行中重复一个单词,则只计算一次,其他单词将被覆盖。

答案 2 :(得分:0)

my %word_count = map { $_ => 0 } split(" ", $line);

答案 3 :(得分:0)

你试图计算一行中出现的单词数量,对吧?如果是这样,你想要

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

或者把它放在头上以便于改进单词的定义:

my %word_count;
++$word_count for $line =~ /(\S+)/g;