perl 数组快速去除重复元素

这里记录两种perl数组去重的办法,一种利用哈希(hash),一种直接利用perl自带的模块List::MoreUtils内部的函数uniq。

一、利用hash去重

示例代码如下:

  1 #!/usr/bin/perl -w
  2 use strict;
  3 
  4 my @list=qw /1 2 3 2 1 4 aa a bb c  b bb d/;
  5 foreach (@list){print "$_ ";}
  6 
  7 print "\n###################\n";
  8 my %ha;
  9 my @uniq=grep{++$ha{$_}<2}@list;
 10 foreach (@uniq){print "$_ ";}

基本原理是将原数组元素作为hash的key,遍历计数,grep函数筛选出只出现一次的key,放入新的数组@uniq中。

输出结果:

  1 1 2 3 2 1 4 aa a bb c b bb d
  2 ###################
  3 1 2 3 4 aa a bb c b d
  4 

二、利用uniq函数去重

这个函数所在的模块List::MoreUtils还有很多其他操作数组的用法,感兴趣的可以看看,多了解下,这里附上参考网址:https://metacpan.org/pod/List::MoreUtils#NAME

示例代码如下:

  1 #!/usr/bin/perl -w
  2 use strict;
  3 use List::MoreUtils ':all';
  4 
  5 my @list=qw /1 2 3 2 1 4 aa a bb c  b bb d/;
  6 foreach (@list){print "$_ ";}
  7 
  8 print "\n###################\n";
  9 my @uni=uniq(@list);
 10 foreach (@uni){print "$_ ";}
 11 

直接调用uniq()函数即可,输出结果如下:

  1 1 2 3 2 1 4 aa a bb c b bb d
  2 ###################
  3 1 2 3 4 aa a bb c b d