我有以下代码
chdir("c:/perl/normalized");
$docid=0;
my %hash = ();
@files = <*>;
foreach $file (@files)
{
$docid++;
open (input, $file);
while (<input>)
{
open (output,'>>c:/perl/tokens/total');
chomp;
(@words) = split(" ");
foreach $word (@words)
{
push @{ $hash{$word} }, $docid;
}
}
}
foreach $key (sort keys %hash) {
print output"$key : @{ $hash{$key} }\n";
}
close (input);
close (output);
这是文件中的示例输出
of : 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 4 4 4 4 5 6 6 7 7 7 7 7 7 7 7 7
这是真的,因为&#34;&#34;例如,在第一个文档中存在10(十个)次 但有没有办法去除重复的值;而不是十个,我只想要一个 谢谢你的帮助
答案 0 :(得分:4)
为避免首先添加重复项,请更改
foreach $word (@words)
到
foreach $word (uniq @words)
如果要将dup留在数据结构中,请改为
print output"$key : @{ $hash{$key} }\n";
到
print output "$key : ", join(" ", uniq @{ $hash{$key} }), "\n";
uniq
由List :: MoreUtils提供。
use List::MoreUtils qw( uniq );
或者您可以使用
sub uniq { my %seen; grep !$seen{$_}++, @_ }