哈希中的每个键都有多个值。在这里,我打印每个键的值
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
有人可以帮助我吗?
谢谢
哈希中的每个键都有多个值。在这里,我打印每个键的值
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
有人可以帮助我吗?
谢谢
@$_ = uniq @$_ foreach values %hash;
就个人而言,我喜欢List::MoreUtils的 uniq 处理这个问题的方式。子程序非常简单,可以按原样使用,也可以通过模块使用。
my %seen;
my @dedupe = grep { not $seen{$_}++ } @{$hash{$var}};
模块中的子例程如下所示:
sub uniq (@) {
my %seen = ();
grep { not $seen{$_}++ } @_;
}
此代码保留列表的初始顺序。
它在哈希中是无关紧要的。您想要做的是对数组中的值进行重复数据删除。
查看uniq()
List::MoreUtils 模块中的函数http://search.cpan.org/dist/List-MoreUtils/
你也可以像这样自己做:
my %h = map {($_,1)} @array_with_dupes;
my @deduped_array = keys %h;
这在Perl 常见问题解答中的“数据:数组”下都有广泛的介绍。
如果您尝试从数组中删除重复值,您可以使用它
#!/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));