【发布时间】:2012-10-06 22:24:38
【问题描述】:
哈希中的每个键都有多个值。在这里,我打印每个键的值
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
有人可以帮我吗?
谢谢
【问题讨论】:
标签: 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
有人可以帮我吗?
谢谢
【问题讨论】:
标签: perl
就个人而言,我喜欢List::MoreUtils 的 uniq 处理这个问题的方式。子程序非常简单,可以直接使用,也可以通过模块使用。
my %seen;
my @dedupe = grep { not $seen{$_}++ } @{$hash{$var}};
模块中的子程序如下所示:
sub uniq (@) {
my %seen = ();
grep { not $seen{$_}++ } @_;
}
此代码保留列表的初始顺序。
【讨论】:
如果你想从数组中删除重复值,你可以使用这个
#!/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));
【讨论】:
@$_ = uniq @$_ foreach values %hash;
【讨论】:
它在哈希中是无关紧要的。您想要做的是对数组中的值进行重复数据删除。
查看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 中有广泛的介绍。
【讨论】: