Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: creating unique list from elements in an array

by mirod (Canon)
on Aug 17, 2001 at 12:52 UTC ( #105635=note: print w/replies, xml ) Need Help??


in reply to creating unique list from elements in an array

The word unique nearly always call for a hash to be used. The solutiom is to extract the names, then to use them as (unique) keys to a hash.

#!/bin/perl -w use strict; my %unique_names; # this is the hash while( <DATA>) { my @values= split /\|/; # extract the fields (don't + forget to backslash the |) my @names= split /,\s*/, $values[2]; # extract the names foreach my $name (@names) { $unique_names{$name}++; } # we don't really care abou +t the value, just the key } my @unique_names= keys %unique_names; # put the names back into a +n array print join "-", @unique_names; print "\n"; __DATA__ value 1|value 2|tom, chris, dave|value 4 value 1|value 2|peter, tom, dave|value 4

Replies are listed 'Best First'.
Re: Re: creating unique list from elements in an array
by Hofmator (Curate) on Aug 17, 2001 at 13:44 UTC

    Very nice, mirod++, a good explanation! I just add the compact version - which is also a bit more efficient because it uses a hash slice:

    my %unique; @unique{ split /,\s*/, ( split /\|/ )[2] } = () while (<DATA>); my @unique_names = keys %unique; print join "-", @unique_names; print "\n"; __DATA__ value 1|value 2|tom, chris, dave|value 4 value 1|value 2|peter, tom, dave|value 4

    -- Hofmator

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2022-11-30 15:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?