Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > Need to remove an array from another array

Reply
Thread Tools

Need to remove an array from another array

 
 
M.L.
Guest
Posts: n/a
 
      10-07-2008
Given an array: @planets = qw(mercury venus earth mars jupiter saturn uranus
neptune pluto);
and @removes = qw(venus mars pluto);

I'd like to know how to grep the @removes from @planets such that
@planets = qw(mercury earth jupiter saturn uranus neptune);

I tried
@planets = grep (!/$removes[0..$#removes]/, @planets);
but that didn't work and I'm out of ideas. Any assistance appreciated.
Thanks.



 
Reply With Quote
 
 
 
 
Peter Makholm
Guest
Posts: n/a
 
      10-07-2008
"M.L." <(E-Mail Removed)> writes:

> Given an array: @planets = qw(mercury venus earth mars jupiter saturn uranus
> neptune pluto);
> and @removes = qw(venus mars pluto);


A standard way would be to 'upgrade' the @removes array to ans hash
and then use the existance of a key in the has as the condition for a
grep:

%removes = map { $_ => 1 } @removes;
@planets = grep { !$remove{$_} } @planets;

//Makholm
 
Reply With Quote
 
 
 
 
Jürgen Exner
Guest
Posts: n/a
 
      10-07-2008
"M.L." <(E-Mail Removed)> wrote:
>Given an array: @planets = qw(mercury venus earth mars jupiter saturn uranus
>neptune pluto);
>and @removes = qw(venus mars pluto);


perldoc -q intersection:
"How do I compute the difference of two arrays? How do I compute the
intersection of two arrays?"

jue
 
Reply With Quote
 
sln@netherlands.com
Guest
Posts: n/a
 
      10-08-2008
On Tue, 7 Oct 2008 12:36:41 -0500, "M.L." <(E-Mail Removed)> wrote:

>Given an array: @planets = qw(mercury venus earth mars jupiter saturn uranus
>neptune pluto);
>and @removes = qw(venus mars pluto);
>
>I'd like to know how to grep the @removes from @planets such that
>@planets = qw(mercury earth jupiter saturn uranus neptune);
>
>I tried
>@planets = grep (!/$removes[0..$#removes]/, @planets);
>but that didn't work and I'm out of ideas. Any assistance appreciated.
>Thanks.
>
>

Why don't you just say it in English, do you really need examples?

The most important array comparison is thier similarity, not the difference!!!
Similarity first, difference by default.

sln
 
Reply With Quote
 
M.L.
Guest
Posts: n/a
 
      10-08-2008
>> Given an array: @planets = qw(mercury venus earth mars jupiter saturn
>> uranus
>> neptune pluto);
>> and @removes = qw(venus mars pluto);

>
> A standard way would be to 'upgrade' the @removes array to ans hash
> and then use the existance of a key in the has as the condition for a
> grep:
>
> %removes = map { $_ => 1 } @removes;
> @planets = grep { !$remove{$_} } @planets;


I found your solution to be not only elegant, but the easiest to understand.
After making a slight correction ($remove{$_} -> $removes{$_} ), your
solution worked like a charm. Thank you so much.

 
Reply With Quote
 
M.L.
Guest
Posts: n/a
 
      10-08-2008
>>Given an array: @planets = qw(mercury venus earth mars jupiter saturn
>>uranus
>>neptune pluto);
>>and @removes = qw(venus mars pluto);

>
> perldoc -q intersection:
> "How do I compute the difference of two arrays? How do I compute the
> intersection of two arrays?"


Thank you for your perldoc reference. While it provided a little more
horsepower than I needed, I found it very enlightening. I'll keep it in my
Perl notes file.

 
Reply With Quote
 
Jürgen Exner
Guest
Posts: n/a
 
      10-08-2008
"M.L." <(E-Mail Removed)> wrote:
>Given an array: @planets = qw(mercury venus earth mars jupiter saturn uranus
>neptune pluto);
>and @removes = qw(venus mars pluto);
>
>I'd like to know how to grep the @removes from @planets such that
>@planets = qw(mercury earth jupiter saturn uranus neptune);


Coming to think of it, your spec via example is rather incomplete:
- what about if @planets contains multiple entries with the same value,
e.g. 'mars'? Are you supposed to remove all occurences of 'mars' from
@planets, even if @removes contains only one entry 'mars'? And if only
one is to be removed, then which one? Any? The first?
-probably less critical: what about if @removes contain an element that
is not part of @planets? Error? Or just ignore?

It appears to me you are using the arrays to represent mathematical
sets: elements are unique and sequence doesn't matter. If this is true,
then a hash would be a much better data structure.

jue
 
Reply With Quote
 
sln@netherlands.com
Guest
Posts: n/a
 
      10-08-2008
On Wed, 8 Oct 2008 00:16:38 -0500, "M.L." <(E-Mail Removed)> wrote:

>>> Given an array: @planets = qw(mercury venus earth mars jupiter saturn
>>> uranus
>>> neptune pluto);
>>> and @removes = qw(venus mars pluto);

>>
>> A standard way would be to 'upgrade' the @removes array to ans hash
>> and then use the existance of a key in the has as the condition for a
>> grep:
>>
>> %removes = map { $_ => 1 } @removes;
>> @planets = grep { !$remove{$_} } @planets;

>
>I found your solution to be not only elegant, but the easiest to understand.
>After making a slight correction ($remove{$_} -> $removes{$_} ), your
>solution worked like a charm. Thank you so much.


It just makes me sick listening to crap like this. I wan't to puke in your face.

sln

 
Reply With Quote
 
M.L.
Guest
Posts: n/a
 
      10-08-2008
>>Given an array: @planets = qw(mercury venus earth mars jupiter saturn
>>uranus
>>neptune pluto);
>>and @removes = qw(venus mars pluto);
>>
>>I'd like to know how to grep the @removes from @planets such that
>>@planets = qw(mercury earth jupiter saturn uranus neptune);

>
> Coming to think of it, your spec via example is rather incomplete:
> - what about if @planets contains multiple entries with the same value,
> e.g. 'mars'? Are you supposed to remove all occurences of 'mars' from
> @planets, even if @removes contains only one entry 'mars'? And if only
> one is to be removed, then which one? Any? The first?
> -probably less critical: what about if @removes contain an element that
> is not part of @planets? Error? Or just ignore?
>
> It appears to me you are using the arrays to represent mathematical
> sets: elements are unique and sequence doesn't matter. If this is true,
> then a hash would be a much better data structure.


Nothing really complex about my setup. I created @planets as an easy to
understand analogue representing the unique form variables on my HTML form.
I deliberately created the @removes array of variables as a means to get rid
of any unneeded form variables before they were printed out for an email
response.

For my email response problem it would be necessary to get rid of *any*
duplicate entries in @planets that were specified in @removes since I
wouldn't want the recipient to ever see them. Since I created @removes for a
specific duty, I would never allow it to have duplicate entries. Even if it
did, I've already used Google to learn how to get rid of duplicate entries
from an array. So I'm all set for now.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Httpmodule still executed even if remove using <remove> config entry Simon-Pierre Jarry ASP .Net 2 08-10-2005 11:22 AM
How to remove items from add/remove list please Caractucus Potts Computer Support 5 07-03-2005 10:31 PM
Re: Why I can not remove all dialers after "remove"-I have two anti-dialers programs Joseph Ladovic Computer Security 3 05-26-2005 03:00 AM
Add/Remove Program Glitch: Asks If I Want To To Remove Wrong Program ? Robert11 Computer Support 6 08-02-2004 09:02 PM
Remove elements from one array found in another Bryan Perl Misc 8 05-07-2004 04:58 PM



Advertisments