Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36041
  • 博文数量: 37
  • 博客积分: 1437
  • 博客等级: 上尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-20 08:47
文章分类
文章存档

2011年(7)

2010年(16)

2009年(14)

我的朋友

分类:

2010-03-12 17:41:44



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


#!/usr/bin/perl
@array = qw(a b a c d d e f g f h h);
@unique = grep { ++$count{$_} < 2 } @array;
print "@unique \n";


用@unique = grep { ++$count{$_} < 2 } @array一条命令搞定



方法很多,先介绍下我自己的方法,通过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数组里了,从而达到去掉重复元素的目的。
两种方法从运行效率上来看应该差不多,不过第二个感觉更炫一点。


阅读(509) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~