On Fri, Oct 14, 2011 at 4:32 PM, Shlomi Fish <[email protected]> wrote:
> On Thu, 13 Oct 2011 02:39:52 -0700 (PDT) > Lemon <[email protected]> wrote: > > > Dear all, > > > > I want to sort data set like this > > > > (@a, @b) > > 1,2 1,2 > > 7,89 => 2,33 > > 54,78 7,89 > > 2,33 54,78 > > > > > > I know that linux command sort can do these kind of things by "sort - > > k1,1n", but how can I do it by perl? I could not use hash because > > the first row may be repeat. > > > > If the data set is an array of array references you can use the "||" to > chain > comparisons: > > [CODE] > my @sorted = sort { ($a->[0] <=> $b->[0]) || ($a->[1] <=> $b->[1]) } > @a_and_b; > [/CODE] > > If the two data sets are kept as separate arrays you can sort an array of > indexes: > > [CODE] > my @sorted_indexes = sort { ($arr1[$a] <=> $arr1[$b]) || ($arr2[$a] <=> > $arr2[$b]) } (0 .. $#arr1); > [/CODE] > > For more information see: > > > http://perl-begin.org/tutorials/perl-for-newbies/part4/#page--and_or--sort--PAGE > > Regards, > > Shlomi Fish > > -- > ----------------------------------------------------------------- > Shlomi Fish http://www.shlomifish.org/ > Escape from GNU Autohell - > http://www.shlomifish.org/open-source/anti/autohell/ > > There is no IGLU Cabal! None of them could pass the Turing test. But > strangely > enough a computer program they coded, could. > > Please reply to list if it's a mailing list post - http://shlom.in/reply . > > -- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > http://learn.perl.org/ > > > Another good source for explanations and a lot of answers to questions you are sure to have at some point in time: http://www.perlmonks.org/?node_id=15209 This one deals exactly with your question and suggests the same solution as Shlomi does but spends a little bit more time on explaining this. (the link Shlomi posted explains this as well of course ;-) Regards, Rob
