在perl中比较数组和hashmap并从hash中删除元素

在perl中比较数组和hashmap并从hash中删除元素,perl,hashmap,compare,Perl,Hashmap,Compare,我有一个文件被读入,然后变成一个数组,然后计数并放入一个哈希表。然后我读入另一个文件,该文件将停止字放入数组中。我想获取停止字数组,并将其与哈希表进行比较,如果停止字中的一个字是匹配的,那么它会将其从哈希表中删除 我很好奇我可以用什么方法来实现这一点,使用perl。我不会发布我的代码,因为我不让别人写我的代码。我只是想知道我该怎么做。如果有人有一个好的网站,我可以参考,这可能会有所帮助。试试这个: my %table = some_sub_to_populate_table(); my @sto

我有一个文件被读入,然后变成一个数组,然后计数并放入一个哈希表。然后我读入另一个文件,该文件将停止字放入数组中。我想获取停止字数组,并将其与哈希表进行比较,如果停止字中的一个字是匹配的,那么它会将其从哈希表中删除

我很好奇我可以用什么方法来实现这一点,使用perl。我不会发布我的代码,因为我不让别人写我的代码。我只是想知道我该怎么做。如果有人有一个好的网站,我可以参考,这可能会有所帮助。

试试这个:

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 };
}
试试这个:

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 };
}
这也应该行得通

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);
打开FH,“这也应该有效

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);

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

my %new_table = map { $_ => $old_table{$_} } grep { not $_ ~~ @stop_words } keys %old_table;
1:它使用grep获取@stop\u单词中没有的所有哈希键:

grep { not $_ ~~ @stop_words } keys %old_table;
my %new_table = map { $_ => $old_table{$_} }
2:使用这些键,它将使用映射创建一个新的哈希:

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

如果要将它们转换为数组,可以使用array_-minus of

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

my %new_table = map { $_ => $old_table{$_} } grep { not $_ ~~ @stop_words } keys %old_table;
1:它使用grep获取@stop\u单词中没有的所有哈希键:

grep { not $_ ~~ @stop_words } keys %old_table;
my %new_table = map { $_ => $old_table{$_} }
2:使用这些键,它将使用映射创建一个新的哈希:

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

如果要将它们转换为数组,可以使用array_-minus of

如果不发布代码,这很困难,但至少可以解释您尝试了什么。就我个人而言,我会从数组中删除停止字,然后进行哈希运算。@gpojd为什么您更愿意这样做?不过我能做到。只需移动数组进行散列。将数组与数组进行比较并删除元素是否更容易?如果不发布代码,这很难,但至少可以解释您尝试了什么。就我个人而言,我会从数组中删除停止字,然后进行哈希运算。@gpojd为什么您更愿意这样做?不过我能做到。只需移动数组进行散列。将数组与数组进行比较并删除元素是否更容易?您应该将
open
的三参数版本与词法文件句柄一起使用。因此,例如
open my$fh',您正在构造一个hashref,然后尝试删除散列中的键,在您的示例中,您应该更准确。您应该使用
open
的三参数版本以及词法文件句柄。例如,
open my$fh,'您正在构造一个hashref,然后尝试删除散列中的键,您的示例中应该更精确。我要试试这个,我问过其他人,他们说比较数组和数组会更容易,但我认为将数组与哈希表进行比较并删除哈希而不是每次都限制数组似乎更符合逻辑。我要试试这个,我问过其他人,他们说比较数组与数组更容易,但我认为将数组与哈希表进行比较并删除哈希而不是每次都限制数组似乎更符合逻辑。