Re: preserve sort order in another list



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


----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeeds.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= East/West-Coast Server Farms - Total Privacy via Encryption =---
.



Relevant Pages

  • Re: "Sorting" assignment
    ... And many others prefer to call partition exchange because "quicksort" ... bin B depending on whether it is greater than, ... If the array is already sorted, this means that you end up ... attempt to sort them. ...
    (comp.programming)
  • Re: A Fast sorting algorithm for almost sorted data
    ... far my compressor has potential but is nowhere near ready. ... It does however make heavy use of sorting. ... which I am currently calling Run sort. ... entire selected run can be added to the sorted output array. ...
    (comp.compression)
  • A Fast sorting algorithm for almost sorted data
    ... which I am currently calling Run sort. ... entire selected run can be added to the sorted output array. ... public class RunSort implements Comparator ... public static void sort(Comparable a, int start,int end) ...
    (comp.compression)
  • Re: Save & Sort
    ... You can copy your array to a scratch ... "Heap" sort. ... Dim lst As Long ... Dim tmp As String ...
    (microsoft.public.excel.programming)
  • Re: Sorting Arrays via VBS / JScript
    ... > I need to sort the file/Array first so I can do proper reading. ... > ' Now that I have the File in the array. ... dim myIn, myhelpr ... set oSort = WScript.CreateObject ...
    (microsoft.public.scripting.wsh)