:) Rob Thank you very much for your help. Finally, I got this figured out. [?]
On Wed, Feb 11, 2009 at 9:47 PM, Rob Dixon <rob.di...@gmx.com> wrote: > kevin liu wrote: > > Hi everybody: > > > > I have two arrays(@nwarray0 and @nwarray1) in my program and i > want > > to make sure that > > all the elements in @nwarray0 could be found in @nwarray1. > > Here is my implementation: > > ------------------------------------------------------- > > foreach my $srctemp ( @nwarray0 ) { > > > > foreach my $tgttemp ( @nwarray1 ) { > > if ( $tgttemp eq $srctemp ) { > > $found = 1; > > last; > > } > > } > > if ( $found == 1 ) { > > $found = 0; > > next; > > } > > else { > > return 1; > > } > > } > > -------------------------------------------------------- > > But this algorithm takes a long time to compare, could you please > > help to improve this piece of > > code to less the time needed? > > The classical method is to use a hash, but there is also a module > List::Compare > that is written to do this kind of job for you. The program below > illustrates > both methods. > > HTH, > > Rob > > > use strict; > use warnings; > > use List::Compare; > > # Using List::Compare > # > my @nwarray0 = qw/A B C D/; > my @nwarray1 = qw/A B D E F G/; > > my $compare = List::Compare->new(\...@nwarray0, \...@nwarray1); > > my @unique = $compare->get_unique; > print scalar @unique, " unique keys in @nwarray0\n"; > > # Using a hash > # > my %unique; > > @uniq...@nwarray0} = (); > delete @uniq...@nwarray1}; > > print scalar keys %unique, " unique keys in @nwarray0\n"; >
<<B0C.gif>>