laziness, impatience, and hubris PerlMonks

### Re: Perl (specific) Algorithms?

by japhy (Canon)
 on May 22, 2001 at 05:49 UTC ( #82149=note: print w/replies, xml ) Need Help??

in reply to Perl (specific) Algorithms?

Shell programmers are probably the most aware of the concept of a schwartzian transform. They get the results from something like ls -l, sort it somehow, and then use awk to extract a specific field.

Thanks to Perl's built-in hash data type, many idioms (such as intersection, union, and difference computation) are a snap:
```@union = union(\@a, \@b);
@inter = intersection(\@a, \@b, \@c);
@diff  = difference(\@a, \@b);
@in_a  = unique_to(\@a, (\@b, \@c));

sub union {
my %seen;
@seen{@\$_} = () for @_;
return keys %seen;
}

sub intersection {
my %seen;
for (@_) { \$seen{\$_}++ for @\$_ }
return grep \$seen{\$_} == @_, keys %seen;
}

sub difference {
my %seen;
for (@_) { \$seen{\$_}++ for @\$_ }
return grep \$seen{\$_} == 1, keys %seen;
}

sub unique_to {
my %seen;
@seen{@{ shift() }} = ();
delete @seen{@\$_} for @_;
return keys %seen;
}
Finding unique elements in a list is as easy as converting the list to the keys of a hash, and then extracting the keys again.

japhy -- Perl and Regex Hacker

Create A New User
Node Status?
node history
Node Type: note [id://82149]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2020-04-08 15:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
The most amusing oxymoron is:

Results (44 votes). Check out past polls.

Notices?