2012-04-11 2 views
2

내 배열이 내 새 해시 키가 되길 바랍니다. 나는 문서의 단어 발생 횟수를 세는 프로그램을 작성 중이다.배열의 내용을 해시 키로 사용할 수 있습니까?

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

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

이 세그먼트는 줄 단위로 infile을 읽는 동안 발생합니다. 해시를 사용하여이 프로젝트를 완료하는 방법을 찾으려고합니다. 단어는 키이고 나타나는 횟수는 값입니다. 그러나이 단계는 특히 나를 혼란스럽게합니다.

답변

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

그렇게 할 수는 없습니다.

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

은 해시 키를 초기화합니다. 하지만 일반적으로 Perl에서는 그렇게하고 싶지 않습니다. 여기에 두 가지 문제가

  1. 당신이에 실제로 계정에 두 번째 패스를 필요가있는 라인에있는 단어;
  2. 위의 코드에서 01으로 바꾸고 변경할 수 없습니다. 라인에서 단어를 반복하면 한 번만 계산되고 나머지는 덮어 쓰기가되기 때문입니다.
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 $line =~ /(\S+)/g; 
: 그렇다면, 당신은

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

또는 단어의 정의를 정제 촉진하기 위해 머리에 넣어하기를 원하는

관련 문제