[Tips]perl去除数组中重复元素
author: 云舒
http://www.ph4nt0m.org
写一个小程序时候,需要去除一个数组中的重复元素,搜索了一下,找到的代码主要是两种,一种是使用grep函数,一种是转换为hash表,代码分别如下:
使用grep函数代码片段:
my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %count;
my @uniq_times = grep { ++$count < 2; } @array;
my %count;
my @uniq_times = grep { ++$count < 2; } @array;
使用转换hash代码片段:
my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %saw;
@saw = ( );
my @uniq_array = sort keys %saw;
my %saw;
@saw = ( );
my @uniq_array = sort keys %saw;
使用grep那种方法并不是很好懂,我尝试解释一下,未必说得清楚或者正确。其实就是把数组的每个元素作为一个hash表的key,++之后第一个元素出现的时候值就是1,如果第二次出现这个值就是2了。其实就是统计了数组每个元素的出现次数,少于2次的就放到新的数组当中。我写了个比较好懂的代码,和使用grep方法的代码原理大致相同,但是又不完全一样,代码如下:
my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %count_hash;
my @uniq_array;
foreach my $value ( @array )
{
if( exists( $count_hash ) )
{
next;
}
else
{
$count_hash = 1;
push( @uniq_array, $value );
}
}
my %count_hash;
my @uniq_array;
foreach my $value ( @array )
{
if( exists( $count_hash ) )
{
next;
}
else
{
$count_hash = 1;
push( @uniq_array, $value );
}
}
我写的这个稍微长一点,效率如何没有测试,因为我只是小规模的应用,不涉及到这些。不过友好成都应该好一些吧,比较容易看。同样是把数组的元素作为 hash的key,如果是首次出现就push到新数组中。所有代码都是在RadHat AS3 + Perl 5.8.0环境下测试的。
1 条评论:
toms outlet
cheap jordans
coach outlet store online
true religion outlet online
timberland outlet
cheap air jordans
michael kors outlet
louis vuitton outlet
kobe 10
tory burch handbags
cheap jerseys
air jordans
hermes birkin handbags
oakley outlet
the north face outlet
ghd hair straighteners
coach factory outlet online
true religion outlet
adidas boost
michael kors outlet
lebron 12
michael kors outlet
coach factory outlet online
retro 11
louboutin femme
nfl jerseys
fit flops
coach factory outlet
montblanc pens
coach factory outlet
chenyingying2016718
发表评论