将数组与hashmap进行比较并从perl中的hash中删除元素

时间:2012-11-19 14:56:04

标签: perl hashmap compare

我有一个正在读取的文件然后更改为一个数组然后计数并放入一个哈希表。然后,我读入了另一个文件,该文件将单词停止为数组。我想获取停用词的数组并将其与哈希表进行比较,如果停用词中的一个词是匹配的,那么它会从哈希表中删除它。

我很好奇我可以用perl实现这个目的的方法。我不会发布我的代码,因为我没有让别人写我的代码。我只想知道如何解决这个问题。如果某人有一个很好的网站我可以参考,这可能有所帮助。

3 个答案:

答案 0 :(得分: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 };
}

答案 1 :(得分: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 :(得分:1)

我最初会使用简单循环解决方案,但我也对其他方式感兴趣。也许你可以尝试这个吗?

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

1:使用 grep 获取所有不在@stop_words中的哈希键:

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

2:使用这些密钥,它会使用地图创建新的哈希:

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

如果要将它们转换为数组,可以使用Array::Utils的array_minus