Perl数组集合化

如何使数组仅包含不同的值,也就是说,去除一数组中重复的冗余值? Perl 5 没有过滤数组重复值的内建函数,但还是有很多解决方案

方案1:使用List::MoreUtils模块的uniq函数

use List::MoreUtils qw(uniq);

my @words = qw(foo bar baz foo zorg baz);
my @unique_words = uniq @words;

方案2: 使用grep函数

my @array = qw(aaa,bbb,aaa,ccc,bbb,ddd,aaa);
@array = grep {!${$_}++ } @array;

  实例:提取数组中含有另一个数组关键字的元素

#!/usr/bin/perl 

@list = ('abc','ab','cde','efg','aue');
@array = ('a','b','c');
@aa;
foreach $li (@list){
    foreach $var (@array) {
        if ($li =~ m/$var/) {    
            push @aa, $li;  
        }
    }
}
print "@aa\n";           #@aa = qw(abc,ab,aue,abc,ab,abc,cde)
@aa = grep {!${$_}++ } @aa; 
print "@aa\n";          #@aa = qw(abc,ab,aue,cde)  

方案3:利用哈希键的唯一性

my @aa=('a','b','b','c','b','d','e','d','e');
for (@aa) {
    $aa{$_}=0;
} 
my @aa = sort{$a<=>$b} keys %aa; 
my @aa = sort @aa; 
print @aa,"\n"; 

 

posted @ 2018-07-26 14:21  junywang  阅读(449)  评论(0)    收藏  举报