2012-11-19 3 views
1

파일을 읽어 와서 배열로 변경 한 다음 계산하여 해시 테이블에 넣습니다. 그런 다음 배열에 정지 단어가있는 다른 파일을 읽습니다. 중지 단어 배열을 가져 와서 해시 테이블과 비교하고 중지 단어의 단어가 일치하면 해시 테이블에서 단어를 삭제합니다.배열을 hashmap과 비교하고 perl의 해시에서 요소를 삭제합니다.

나는 perl을 사용하여 이것을 달성하기 위해 내가 할 수있는 방법이 무엇인지 궁금하다. 다른 사람들이 내 코드를 작성하는 것을 삼가고 있기 때문에 나는 내 코드를 게시하지 않을 것이다. 나는 이것에 대해 어떻게 생각하는지 알고 싶습니다. 누군가 좋은 웹 사이트를 가지고 있다면 도움이 될만한 참고 자료가 될 수 있습니다.

+0

코드를 게시하면 어렵지만 적어도 시도한 것을 설명 할 수는 있습니다. 개인적으로 배열에서 정지 단어를 제거한 다음 해시를 만듭니다. – gpojd

+0

@gpojd 왜 그렇게하고 싶습니까? 나는 그것을 할 수있다. 어레이를 해시로 이동하십시오. 배열을 배열과 비교하고 요소를 더 쉽게 삭제합니까? –

답변

3

이 시도 :

my %table = some_sub_to_populate_table(); 
my @stop_words = some_sub_to_get_stopwords(); 
for my $stop_word (@stop_words) { 
    delete $table{ $stop_word }; 
} 
+0

나는 이것을 시도 할 것이다. 배열에 배열을 비교하는 것이 더 쉬울 것이라고 다른 사람에게 물었다. 그러나 배열을 해시 테이블과 비교하고 매번 배열을 제한하는 대신 해시를 삭제하는 것이 더 논리적으로 보인다고 생각한다. . –

1

이 작동합니다, 너무 내가 처음 간단한 루프 솔루션를 사용하지만 다른 방법을에 대한 관심 또한 나는 것

open FH,"<".$PATH or die $!; 
my $table={}; 
while(<FH>){ 
    $table->{$_}=VALUE 
} 
close FH; 
open FH,"<".$PATH2 or die $!; 
my @arr=<FH>; 
close $FH; 
delete $table{$_} foreach(@arr); 

관련

+2

어휘 파일 핸들과 함께 'open'의 세 인수 버전을 사용해야합니다. 그래서 예를 들어,'open $ fh, '<', $ filename 또는 die $ !; ' – dgw

+1

해쉬 레퍼런스를 만들고 나서 해쉬 안에서 키를 지우려고 할 때, 당신의 예제에서 좀 더 정확해야합니다. – dgw

1

그것을하기 위해. 이걸 시도해 볼 수 있을까요?

my %new_table = map { $_ => $old_table{$_} } grep { not $_ ~~ @stop_words } keys %old_table; 

1 : 그것은 그렙 사용 @stop_words에있는 모든 해시 키를하지 가져옵니다

grep { not $_ ~~ @stop_words } keys %old_table; 

2 :을 그 키를 사용하여, 그것은 지도을 사용하여 새 해시를 생성 :

my %new_table = map { $_ => $old_table{$_} } 

배열로 변환하려면 array_minus의 Array::Utils

관련 문제