ԱŮװ
Ů
׷
Դװ
˼Դ
Ҿ̳
Ա
װ
װ
83ʱŮ
Ҿװ
Ա̳
Ա̳ Ҿװ Ҿ̳ 83ʱŮ ԱŮװ Ů ׷ Դװ ˼Դ װ Ա װ
首页 > tips > perl中去除数组里的重复元素

perl中去除数组里的重复元素

方法很多,先介绍下我自己的方法,通过hash的键唯一性来得到不重复的元素列表,代码如下:

1
2
3
4
5
6
7
8
#!/usr/bin/perl 
use warnings;
use strict;
 
my @array = ("a","b","c","d","a","d","c");
my %hash;
$hash{$_}++ foreach (@array);
print sort keys %hash;

下面是网上看到的一个方法,通过grep函数来获得不重复的元素:

1
2
3
4
5
6
7
8
#!/usr/bin/perl
use warnings;
use strict;
 
my @array = ("a","b","c","d","a","d","c");
my %hash;
my @out = grep (!$hash{$_}++, @array);
print @out;

该方法的意思是:当第一次碰到某元素$_时,$hash{$_}的值为0,!$hash{$_}为真,于是把元素$_加到数组@out中,然后把$hash{$_}值加1,这样下次再碰到同样的元素时由于!$hash{$_}此时为假,就不会写入@out数组里了,从而达到去掉重复元素的目的。
两种方法从运行效率上来看应该差不多,不过第二个感觉更炫一点。

分类: tips 标签: 2,371 views

收藏本文:Del.icio.us - Google书签 - 分享到Twitter - 收藏到鲜果 - yahoo收藏 - digg - 更多 »


转载请注明出处及作者信息

本文链接: http://blog.happysa.org/tips/remove_duplicate_elements_in_perl.html


Creative Commons License

  1. monger
    2010年1月21日00:11 | #1

    try this:
    @a = qw/1 2 3 4 3 4/;
    @h{@a} = ();
    print keys %h;

  2. wuzhez
    2010年1月21日10:14 | #2

    @monger
    还是你这比较简单

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。