Ordering arrays?

G

Gary Mayor

Hi,
I'm trying to get an array into order i've got this array,
$number[1] = "5";
$number[2] = "7";
$number[3] = "4";
$number[4] = "8";
$number[5] = "7";

i'm trying to get it into another array it looks like this,
$number2[1] = "8";
$number2[2] = "7";
$number2[3] = "7";
$number2[4] = "5";
$number2[5] = "4";

So far i've got some code like this,
for($i=1;$i<=$count;$i++) {
for($ii=1;$ii<=$count;$ii++) {
if ($number[$ii]>=$highest[$i]) {
$number2 = $number[$i];
print "\n$number2[$i]";
}
}
}

I've tried the pseudo but could figure out the logic. This is the first
time i've had to do ordering of this sort so i'm a bit stuck at which
way to go next. I've checked out cpan but couldn't find anything that
looked like it would do what i wanted.

Has anyone got any ideas please.

Thanks

Gary
 
R

Ryan Shondell

Gary Mayor said:
Hi,
I'm trying to get an array into order i've got this array,
$number[1] = "5";
$number[2] = "7";
$number[3] = "4";
$number[4] = "8";
$number[5] = "7";

i'm trying to get it into another array it looks like this,
$number2[1] = "8";
$number2[2] = "7";
$number2[3] = "7";
$number2[4] = "5";
$number2[5] = "4";

I think I would do something like this...

@number2 = reverse sort @number1;

Ryan
 
G

Gunnar Hjalmarsson

G

Gary Mayor

Now that is wicked five minutes later i had an answer cheers mate that
works a treat.

Thanks

Gary

Ryan said:
Hi,
I'm trying to get an array into order i've got this array,
$number[1] = "5";
$number[2] = "7";
$number[3] = "4";
$number[4] = "8";
$number[5] = "7";

i'm trying to get it into another array it looks like this,
$number2[1] = "8";
$number2[2] = "7";
$number2[3] = "7";
$number2[4] = "5";
$number2[5] = "4";


I think I would do something like this...

@number2 = reverse sort @number1;

Ryan
 
G

Gunnar Hjalmarsson

Ryan said:
Gary said:
I'm trying to get an array into order i've got this array,
$number[1] = "5";
$number[2] = "7";
$number[3] = "4";
$number[4] = "8";
$number[5] = "7";

i'm trying to get it into another array it looks like this,
$number2[1] = "8";
$number2[2] = "7";
$number2[3] = "7";
$number2[4] = "5";
$number2[5] = "4";

I think I would do something like this...

@number2 = reverse sort @number1;

A lexical sort of numbers? Not a good advice, is it? (It happens to
give the same result as a numerical sort applied on the above data,
since all the values are integers with the same number of digits.)

perldoc -f sort
 
R

Ryan Shondell

Gunnar Hjalmarsson said:
A lexical sort of numbers? Not a good advice, is it? (It happens to
give the same result as a numerical sort applied on the above data,
since all the values are integers with the same number of digits.)

You're right, of course. I imagine my brain saw the quotes around the
numbers, and went on "lexical autopilot". :)

@number2 = sort {$b <=> $a} @number1;

is a much better solution.

Ryan
 
J

John W. Krahn

Gary said:
I'm trying to get an array into order i've got this array,
$number[1] = "5";
$number[2] = "7";
$number[3] = "4";
$number[4] = "8";
$number[5] = "7";

i'm trying to get it into another array it looks like this,
$number2[1] = "8";
$number2[2] = "7";
$number2[3] = "7";
$number2[4] = "5";
$number2[5] = "4";

Others have suggested:

@number2 = sort { $b <=> $a } @number;

However that populates $number[0] which I see you don't want. Or did
you think that Perl's arrays started at [1]? Anyway, this will do what
you want:

@number2 = ( undef, sort { $b <=> $a } @number );

Or:

@number2[ 1 .. $#number ] = sort { $b <=> $a } @number;



John
 
W

Web Surfer

[This followup was posted to comp.lang.perl.misc]

Hi,
I'm trying to get an array into order i've got this array,
$number[1] = "5";
$number[2] = "7";
$number[3] = "4";
$number[4] = "8";
$number[5] = "7";

i'm trying to get it into another array it looks like this,
$number2[1] = "8";
$number2[2] = "7";
$number2[3] = "7";
$number2[4] = "5";
$number2[5] = "4";

So far i've got some code like this,
for($i=1;$i<=$count;$i++) {
for($ii=1;$ii<=$count;$ii++) {
if ($number[$ii]>=$highest[$i]) {
$number2 = $number[$i];
print "\n$number2[$i]";
}
}
}

I've tried the pseudo but could figure out the logic. This is the first
time i've had to do ordering of this sort so i'm a bit stuck at which
way to go next. I've checked out cpan but couldn't find anything that
looked like it would do what i wanted.

Has anyone got any ideas please.

Thanks

Gary


You should use perl's builtin "sort" function. See "perldoc -f sort"
for further details.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top