@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) |