如何从Perl中的数组中删除重复值?

时间:2012-10-16 18:29:57

标签: perl

哈希中的每个键都有多个值。在这里,我打印每个键的值

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

有人可以帮助我吗?

由于

4 个答案:

答案 0 :(得分:3)

使用List::MoreUtils::uniq

@$_ = 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));