2

配列を新しいハッシュのキーにしたい。ドキュメント内の単語の出現回数をカウントするプログラムを書いています。

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

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

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

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 ではそれをしたくありません。ここでの 2 つの問題は、

  1. 行内の単語を実際に説明するには、2 番目のパスが必要です。
  2. 0上記の をごまかしてto に変更することはできません1。行内で単語が繰り返される場合、それは 1 回だけカウントされ、他の単語は上書きされるためです。
于 2012-04-11T00:21:14.360 に答える
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 に答える
0
my %word_count = map { $_ => 0 } split(" ", $line);
于 2012-04-11T00:18:36.817 に答える