Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Fast Way to Return Unique Array of Array

by pg (Canon)
on Sep 05, 2005 at 03:30 UTC ( [id://489130]=note: print w/replies, xml ) Need Help??


in reply to Fast Way to Return Unique Array of Array

This is not what the function is supposed to do. Take a look at the source code. It only understands the first level of your AoA. Copy and paste, modify a little bit:

use Data::Dumper; my @AoA = (['a','b','c'], ['a','b','c'], ['a','b','d'], ['a','b','d']); my @uAoA = uniq(@AoA); sub uniq () { #updated, the prototype was taken out my %h; map { $h{$_}++ == 0 ? $_ : () } @_; print Dumper \%h; }

Run it , you get print out similar to this:

$VAR1 = { 'ARRAY(0x224ff8)' => 1, 'ARRAY(0x18c3a2c)' => 1, 'ARRAY(0x1875904)' => 1, 'ARRAY(0x224ef0)' => 1 };

Now it is obvious, all those four elements of the LIST are different and uniqe, and that's why the entire original AOA is returned.

Update:

Just to extend a little bit. uniq will work with this code, base on the way the AoA is formed. The input AoA is logically equal to your AoA. And the output is now the same as what you wanted. (I am not saying that this is a solution for you, as you probably cannot form your data like this or cannot do it easily. This only demos the nature of uniq(). )

use Data::Dumper; use List::MoreUtils qw(uniq); use strict; use warnings; my $a = ['a','b','c']; my $b = ['a','b','d']; my @AoA = ($a, $a, $b, $b); my @uAoA = uniq(@AoA); print Dumper(\@uAoA);

Why does it work? Because the uniq function sees two uniq array refs.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-03-28 21:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found