2012-04-11 10 views
2

私の配列を新しいハッシュのキーにしたい。私は、文書内の単語の出現数を数えるプログラムを書いています。配列の内容をハッシュのキーとして使用できますか?

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

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

このセグメントは、インラインを1行ずつ読み込んでいる間に発生しています。私はハッシュを使ってこのプロジェクトを完成させる方法を見つけようとしています。単語はキーであり、出現回数は値です。しかし、このステップは特に私を困惑させています。

答えて

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

このようにすることはできません。

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

は、ハッシュのキーを初期化します。 Perlでは一般的にそうしたくありません。ここでは、2つの問題が

  1. はあなたがラインで単語を実際に口座への第二のパスを必要とするということです。
  2. 0を上記の1に変更して変更することはできません。行内で単語が繰り返されると、1回だけカウントされ、他のものは上書きされるからです。
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; 
0

行の単語の数をカウントしようとしていますか?もしそうなら、あなたは

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

や単語の定義を洗練容易にするために、その頭の上にそれを置くためにしたい:

my %word_count; 
++$word_count for $line =~ /(\S+)/g; 
関連する問題