加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl快捷删除数组重复元素

发布时间:2020-12-15 23:41:57 所属栏目:大数据 来源:网络整理
导读:以前写过类似的博客: http://www.voidcn.com/article/p-ckcmibrl-bge.html 今天拿出来,再好好剖析一下: 1. 构造一个含有重复元素的数组 my @arr1 = ( 1 .. 10 ); my @arr2 = ( 5 .. 15 ); # join multi array my @arr = ( @arr1 , @arr2 ); 2. 删除数组中

以前写过类似的博客: http://www.voidcn.com/article/p-ckcmibrl-bge.html
今天拿出来,再好好剖析一下:

1. 构造一个含有重复元素的数组

my @arr1 = (1 .. 10);
my @arr2 = (5 .. 15);

# join multi array
my @arr = (@arr1,@arr2);

2. 删除数组中的重复元素

sub removeRepeat {
    my $arrRef = shift;
    my %count = ();

    my @uniqArr = grep { ++$count{$_} == 1 } @$arrRef;

    return @uniqArr;
}
  • 定义一个计数哈希,并且初始化为空,即:my %count = ();
    该哈希%count的key为数组元素(即:上面代码中的$_),value为数组重复元素的计数(即:上面代码中的$count{$_}, 初始化值为0,并且该哈希通过key每获取一次value,value都会++)

  • 代码块{ ++$count{$_} == 1 }作为无重复元素的判断条件,并通过grep得到一个满足无重复元素的子数组

完整代码:

#!/usr/bin/perl -w

use strict;
use warnings;
use English;

my @arr1 = (1 .. 10);
my @arr2 = (5 .. 15);

# join multi array
my @arr = (@arr1,@arr2);

printArr(@arr);
print "-------------------------------------n";

my @uniqArr = removeRepeat(@arr);
printArr(@uniqArr);

# remove repeat element in array
sub removeRepeat {
    my $arrRef = shift;
    my %count = ();

    my @uniqArr = grep { ++$count{$_} == 1 } @$arrRef;

    return @uniqArr;
}

# print array
sub printArr {
    my $arrRef = shift;

    foreach my $element (@$arrRef)
    {
        print "$elementn";
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读