zoukankan      html  css  js  c++  java
  • [Perl] 删除数组中重复元素

    写一个小程序时候,需要去除一个数组中的重复元素,搜索了一下,找到的代码主要是两种,一种是使用grep函数,一种是转换为hash表,代码分别如下:

    使用grep函数代码片段:
    代码:


    my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
    my %count;
    my @uniq_times = grep { ++$count{ $_ } < 2; } @array;



    使用转换hash代码片段:
    代码:


    my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
    my %saw;
    @saw{ @array } = ( );
    my @uniq_array = sort keys %saw;



    使用grep那种方法并不是很好懂,我尝试解释一下,未必说得清楚或者正确。其实就是把数组的每个元素作为一个hash表的key,++之后第一个元素出现的时候值就是1,如果第二次出现这个值就是2了。其实就是统计了数组每个元素的出现次数,少于2次的就放到新的数组当中。我写了个比较好懂的代码,和使用grep方法的代码原理大致相同,但是又不完全一样,代码如下:
    代码:


    my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
    my %count_hash;
    my @uniq_array;
    foreach my $value ( @array )
    {
      if( exists( $count_hash{ $value } ) )
      {
         next;
      }
      else
      {
        $count_hash{ $value } = 1;
        push( @uniq_array, $value );
      }
    }
    #!/usr/bin/perl
    
    use strict;
    
    my %hash;
    my @array = (1..10,5,20,2,3,4,5,5);
    #grep 保存符合条件的元素
    @array = grep { ++$hash{$_} < 2 } @array;
    
    print join(" ",@array);
    print "n";
  • 相关阅读:
    第11组 团队Git现场编程实战
    第11组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第11组 团队展示
    第一次结对编程作业
    Nginx学习笔记
    Git学习笔记
    Qt学习笔记
    Eclipse中Outline里各种图标的含义
  • 原文地址:https://www.cnblogs.com/xufeiyang/p/3747617.html
Copyright © 2011-2022 走看看