如何将数组更改为哈希表?

Kir*_*gle 2 perl hashmap

我正在尝试创建一个程序,我在一个文件中读到了一堆文本.然后我拿出标点符号,然后我读了一个文件,里面有停用词.两者都被读入并放入数组中.我正在尝试将一般文本文件的数组放入哈希值.我不确定我做错了什么,但我正在努力.我想这样做,所以我可以生成有关重复多少单词和不重复多少单词的统计数据,但我必须取消停止单词等.

无论如何这里是我到目前为止我发表评论#WORKING ON MERGING ARRAY IN HASH,这是我工作的地方.我不认为我试图将数组放入哈希的方式是正确的,但我在网上查看了%hash {array} ="value"; 不编译.所以不知道怎么做.

谢谢,如果您对我有任何疑问,我会尽快回复.

#!/usr/bin/perl
use strict;
use warnings;

#Reading in the text file
my $file0="data.txt";
open(my $filehandle0,'<', $file0) || die "Could not open $file0\n";
my@words;
while (my $line = <$filehandle0>){
    chomp $line;
    my @word = split(/\s+/, $line); 
    push(@words, @word);
}
for (@words) {
    s/[\,|\.|\!|\?|\:|\;]//g;
}
my %words_count;  #The code I was told to add in this post. 
    $words_count{$_}++ for @words;
Run Code Online (Sandbox Code Playgroud)

接下来,我读到了另一个数组中的停用词.

#Reading in the stopwords file
my $file1 = "stoplist.txt"; 
open(my $filehandle1, '<',$file1) or die "Could not open $file1\n";
my @stopwords;
while(my $line = <$filehandle1>){
    chomp $line;
    my @linearray = split(" ", $line);
    push(@stopwords, @linearray);
}
for my $w (my @stopwords) {
    s/\b\Q$w\E\B//ig; 
}
Run Code Online (Sandbox Code Playgroud)

mem*_*owe 7

关于Perl中哈希的一些注释...问题描述:

无论如何这里是我到目前为止我发表评论#WORKING ON MERGING ARRAY IN HASH,这是我工作的地方.我不认为我试图将数组放入哈希的方式是正确的,但我在网上查看了%hash {array} ="value"; 不编译.所以不知道怎么做.

首先,问问自己为什么要"将数组放入哈希".数组表示值列表,而哈希表示一组键值对.所以你必须定义键和值应该是什么.不仅对我们而言,对你而言.解释甚至简单的事情通常有助于更好地理解.

在这种情况下,你可能要算一个给定词多久$word你在发生@words阵列.这可以通过迭代所有单词并$count{$word}每次增加1来完成.这就是@ raina77ow在他的回答中所做的.这里重要的是,您正在访问单个哈希值,这些哈希值用$Perl中的标量sigil表示.所以,如果你有一个哈希命名%count,可以增加价值的关键'foo'通过

$count{foo}++;
Run Code Online (Sandbox Code Playgroud)

您在上面("在线查看"的结果%hash{array} = "value"没有意义.有三种有效的方法可以在哈希值中存储值:

通过为整个哈希分配一个偶数大小的列表来设置所有键值对:

%count = (hello => 42, world => 17);
Run Code Online (Sandbox Code Playgroud)

通过为已定义的键分配单个值(这是我们之前所做的),为给定​​键设置单个值:

$count{hello} = 42;
Run Code Online (Sandbox Code Playgroud)

使用所谓的散列片设置给定键列表的值列表:

@count{qw(hello world)} = (42, 17);
Run Code Online (Sandbox Code Playgroud)

注意这里使用的%符号:对于$单个(标量)值和值列表,混合键和值的hashy偶数大小的列表@.在您正在使用的示例中%,但在键大括号中定义一个数组{...}并分配一个标量值.

  • +1,应该对OP非常有帮助.) (3认同)
  • 哦,这里没有火箭科学.标量值只是单个原子值,如数字或字符串.但是你可能想要阅读更多关于Perl的基本类型(标量,数组,散列)和它们的符号.:) (3认同)