Re: preserve sort order in another list
- From: "Brett" <bg1343d@xxxxxxxxxxx>
- Date: Thu, 5 May 2005 14:21:16 -0700
"Jim Gibson" <jgibson@xxxxxxxxxxxxxxxxx> wrote in message
news:050520051241241521%jgibson@xxxxxxxxxxxxxxxxxxxx
> In article <XZqdnUK9wc7TyOffRVn-2w@xxxxxxxxxxxx>, Brett
> <bg1343d@xxxxxxxxxxx> wrote:
>
> > "Jürgen Exner" <jurgenex@xxxxxxxxxxx> wrote in message
> > news:8Tmee.2706$Vu.1954@xxxxxxxxxxx
> > > Brett wrote:
> > > > I have two arrays and i wish to sort the first one numerically, but
> > > > after sorting, I would like the second array to be in the same
> > > > matching order as the first array.
> > > >
> > > > ie.
> > > >
> > > > @l1={3,1,2};
> > > > @l2={'a','b','c'};
> > > >
> > > > @l1 = sort {$a <=> $b} (@l1); # sort list @l1 to be {1,2,3}
> > > >
> > > > # do something to @l2 to make order {'b','c','a'} (preserving the
> > > > original mapping with the first list)
> > > >
> > > > There's probably an easy way to do this that i'm not aware of.
> > >
> > > Indeed, there is: use a data structure that matches your problem
better.
> > > Instead of having a pair of unrelated arrays use a single array of
pairs.
> > > And then sort that single array by the value of the first component of
> > each
> > > pair.
> > >
> > > jue
> >
> >
> > I'm new to this, and tried to give it a go.
> >
> > struct ID =>
> > {
> > number => '$',
> > name => '$',
> > };
> >
> > my @IDs = ID->new();
> > #fill data...
> >
> > @IDs = sort {$a->number <=> $b->number} (@IDs); # numeric sort on
number
> >
> > but that failed to sort the list as i expected. How can i use sort to do
> > what I want?
>
> Please post a complete program so we can see where you are going wrong,
> but post it to comp.lang.perl.misc because this newsgroup is defunct.
>
> Here is a version that uses an array of array references to an array of
> two elements, as Jürgen suggested:
>
> #!/usr/local/bin/perl
>
> use strict;
> use warnings;
>
> my @l1 = qw/ 3 1 2 /;
> my @l2 = qw/ a b c /;
>
> my @ids = map { [ $l1[$_], $l2[$_] ] } (0..$#l1);
>
> print "Unsorted Array:\n";
> for my $r ( @ids ) {
> print " @$r\n";
> }
> print "\nSorted array:\n";
> foreach my $r ( sort { $a->[0] <=> $b->[0] } @ids ) {
> print " @$r\n";
> }
>
> __OUTPUT__
>
> Unsorted Array:
> 3 a
> 1 b
> 2 c
>
> Sorted array:
> 1 b
> 2 c
> 3 a
Thanks, i'll report to the other group. I'd like to stick with the
structures, since they look a bit easier.
Brett.
.
- References:
- preserve sort order in another list
- From: Brett
- Re: preserve sort order in another list
- From: Jürgen Exner
- Re: preserve sort order in another list
- From: Brett
- Re: preserve sort order in another list
- From: Jim Gibson
- preserve sort order in another list
- Prev by Date: Re: preserve sort order in another list
- Next by Date: Remote file access from Windows?
- Previous by thread: Re: preserve sort order in another list
- Next by thread: Remote file access from Windows?
- Index(es):
Relevant Pages
|
|