1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

Remove repetitions in Array

Discussion in 'Perl' started by oleber, Apr 28, 2007.

  1. oleber

    oleber New Member

    The normal idea is to have an hash table, iterate over the array and using the elements as keys.

    Something like ::(
    Code:
    my @array = (1,5,3,7,9,1,4,5,7,6,7);
    
    my %hash;
    
    foreach my $element (@array) {
    	$hash{$element}++
    }
    
    my @arrayNoRep = keys %hash;
    print join(", ", @arrayNoRep);
    Lets simplify the loop :cool:
    Code:
    my @array = (1,5,3,7,9,1,4,5,7,6,7);
    
    my %hash;
    $hash{$_}++ foreach @array;
    
    my @arrayNoRep = keys %hash;
    print join(", ", @arrayNoRep);
    But do we need the loop? :confused:
    Code:
    my @array = (1,5,3,7,9,1,4,5,7,6,7);
    
    my %hash;
    @hash{@array} = ();
    
    my @arrayNoRep = keys %hash;
    print join(", ", @arrayNoRep);
    And throwing away the hash defeniton. :eek:
    Code:
    my @array = (1,5,3,7,9,1,4,5,7,6,7);
    
    my @arrayNoRep = keys %{{map {$_=>0} @array}};
    
    print join(", ", @arrayNoRep);
    I love this one line in Perl.:D
     
  2. pradeep

    pradeep Team Leader

    That's really cool! :D
     
  3. oleber

    oleber New Member

  4. msmani_1980

    msmani_1980 New Member

    Remove repetitions in Array without loop

    Code:
    my @array = (1,5,3,7,9,1,4,5,7,6,7);
    @t{@array}=();
    print join sort keys %t,",";
    Result : 1, 3, 4, 5, 6, 7, 9
     
  5. oleber

    oleber New Member

    So, What did you add to the subject msmani_1980?
     
  6. PradeepKr

    PradeepKr New Member

    I couldn't get this line in the 3rd code block
    @hash{@array} = ();

    hash is defined with % in the previous line (%hash) and then it is seen with @ which is meant for array. Can somebody explain me, what exactly "@", prepended to hashname, does?
     
  7. pradeep

    pradeep Team Leader

    "@", prepended to hashname means we are accessing a hash slice i.e. a group of elements instead of one element a time.
     

Share This Page