哈希中的每个键都有多个值。在这里,我打印每个键的值
print "$var:",join ',',@{$hash{$var}},"\n";
以上印刷声明的输出是:
ABC:1,2,3,1,4,2,
DEF:9,3,4,5,3,5,
现在,我想删除值中的重复项。所需的输出是,
ABC:1,2,3,4
DEF:9,3,4,5
有人可以帮助我吗?
由于
答案 0 :(得分:3)
@$_ = uniq @$_ foreach values %hash;
答案 1 :(得分:3)
就个人而言,我喜欢List::MoreUtils的uniq如何处理这个问题。子程序非常简单,可以按原样使用,也可以通过模块使用。
my %seen;
my @dedupe = grep { not $seen{$_}++ } @{$hash{$var}};
模块中的子程序如下所示:
sub uniq (@) {
my %seen = ();
grep { not $seen{$_}++ } @_;
}
此代码保留列表的初始顺序。
答案 2 :(得分:1)
它在散列中是无关紧要的。你想要做的是重复数组中的值。
查看List :: MoreUtils模块http://search.cpan.org/dist/List-MoreUtils/
中的uniq()
函数
你也可以自己这样做:
my %h = map {($_,1)} @array_with_dupes;
my @deduped_array = keys %h;
“数据:阵列”下的the Perl FAQ广泛涵盖了这一点。
答案 3 :(得分:0)
如果您尝试从阵列中删除重复值,可以使用此
#!/usr/bin/perl -w
use strict;
my @array = ('a','b','c','c','e');
my %hash = map { $_ => 1 } @array;
my @out = keys %hash;
printf("%s",join(',',@out));