Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Get just the unique value

by hdb (Prior)
on Apr 05, 2013 at 16:02 UTC ( #1027160=note: print w/ replies, xml ) Need Help??


in reply to Get just the unique value

Use a hash and build keys from the whole entry:

my %res; for my $entry (@$data) { $res{join "|", sort %{$entry}} = $entry; } @$data = values %res; print Dumper $data;

UPDATE: Added a "sort" to become independent from order within the hash.


Comment on Re: Get just the unique value
Download Code
Re^2: Get just the unique value
by Anonymous Monk on Apr 05, 2013 at 17:16 UTC
    It still doesnt work, I am still getting duplicated "type":
    $VAR1 = [ { 'reference' => '100 ', 'name' => 'Discount', 'type' => 'Paper' }, { 'reference' => '30 ', 'name' => 'Slice', 'type' => 'Cotton' }, { 'reference' => '340 ', 'name' => 'Money', 'type' => 'Plastic' }, { 'reference' => '100 ', 'name' => 'Documents', 'type' => 'Paper' }, { 'reference' => '45 ', 'name' => 'Part', 'type' => 'Cotton' }, { 'reference' => '40 ', 'name' => 'State', 'type' => 'Cotton' } ];

      Well, these are the distinct records from your original array of hashes. You did not specify which value is to be unique. I would think that you should now be able from the answers here and the answers from your post yesterday: Accessing this array ref. to conclude whatever you wanted to achieve.

        I saw that posting here, just got the sample data from it to show my issue, but its not the same problem.
      It isn't clear what you want for output. You want to remove entries in the original data where type is duplicated, it seems, but how do you want to handle the case where reference or name is different? Which entry in the arrayref do you want to choose?
        OK, let me try again, I have a data structure like this:
        my $data = [ { 'type' => 'Paper' }, { 'type' => 'Paper' }, { 'type' => 'Plastic' }, { 'type' => 'Plastic' }, { 'type' => 'Plastic' }, { 'type' => 'Plastic' }, { 'type' => 'Cotton' }, { 'type' => 'Cotton' }, { 'type' => 'Cotton' }, { 'type' => 'Cotton' }, { 'type' => 'Cotton' }, { 'type' => 'Paper' }, { 'type' => 'Paper' }, { 'type' => 'Paper' }, { 'type' => 'Paper' }, { 'type' => 'Paper' }, ];
        I need to process this array and filter out the duplicated ones:
        my $res; for my $entry (@$data) { #$entry->{type} = [] unless exists $entry->{type}; push @$res, $res{$entry->{type}}; } print Dumper @$res;
        I just cant get it to work.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1027160]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (9)
As of 2014-12-22 11:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (116 votes), past polls