Sorry, I didn't mean ordered as in sorted, I meant ordered as in I don't want to lose whatever order their in. But thanks for the tip.
On Fri, 02 Jul 2004 14:26:02 -0400, Randy W. Sims wrote > perl.org wrote: > >>From http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch04_07.htm, is this > > really the best way to ensure an *ordered* list contains only unique values? > > It seems like it could/should be easier. I wonder why the examples don't use my. > > > > %seen = (); > > @uniq = (); > > foreach $item (@list) { > > unless ($seen{$item}) { > > # if we get here, we have not seen it before > > $seen{$item} = 1; > > push(@uniq, $item); > > } > > } > > Faster > > > > Well, in order to get a uniq list, you /must/ visit every element of > the list. There are different ways to do this as demonstrated by the > Cookbook. The only (wee tiny) optimization missed is an optimization > that applies only to ordered lists: you only need to track the > previous element in order to determine if the current item is > unique. You don't need a hash. > > The above becomes something like (untested): > > my $prev = ''; > my @uniq = (); > foreach my $item (@list) { > push(@uniq, $item) unless ($item eq $prev); > $prev = $item; > } > > You can also use a 'for' loop and avoid variables all together by > simply indexing into the array... > > Randy. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>