Sorting an array

G

gamo

This code

@sorted = sort {
field4($a) <=> field4($b) ||
field1($a) <=> field1($b)
} @oferta;

simply don't work.

The error message is

Undefined subroutine &main::field4 called at subasta.pl line 30.

Any help is appreciated.
 
J

Jürgen Exner

gamo said:
This code

@sorted = sort {
field4($a) <=> field4($b) ||
field1($a) <=> field1($b)
} @oferta;

simply don't work.

The error message is
Undefined subroutine &main::field4 called at subasta.pl line 30.

Well, yeah, sorry for asking the obvious, but did you define a function
field4() in your main program? You are using it in the comparision, but
perl can't find it.

jue
 
G

gamo

Well, yeah, sorry for asking the obvious, but did you define a function
field4() in your main program? You are using it in the comparision, but
perl can't find it.

jue

I'm afraid I take the FAQ suggestion too literally.
How can be that subs be writed?

The array @oferta has $oferta[0 to .5M][0 to 3]

TIA
 
J

Jürgen Exner

gamo said:
Well, yeah, sorry for asking the obvious, but did you define a function
field4() in your main program? You are using it in the comparision, but
perl can't find it.

I'm afraid I take the FAQ suggestion too literally.
How can be that subs be writed?

The array @oferta has $oferta[0 to .5M][0 to 3]

Insufficient information. Please post a minimal but complete program
that we can compile and run. In your case what we really really need is
an actual sample of your data structure (make sure your program creates
that) as well as a clear, precise description of your sort criteria.

jue
 
J

Jim Gibson

I'm afraid I take the FAQ suggestion too literally.
How can be that subs be writed?

The array @oferta has $oferta[0 to .5M][0 to 3]

If you mean that the @oferta array has 500_000 elements, each of which
is a reference to an array with 4 elements, and you want to sort the
@oferta array using the numerical value of the fourth element of the
referenced arrays as a primary key and the numerical value of the first
element as a secondary key, then what you want is (untested):

@sorted = sort {
$a->[3] <=> $b->[3] ||
$a->[0] <=> $b->[0]
} @oferta;
 
G

gamo

I'm afraid I take the FAQ suggestion too literally.
How can be that subs be writed?

The array @oferta has $oferta[0 to .5M][0 to 3]

If you mean that the @oferta array has 500_000 elements, each of which
is a reference to an array with 4 elements, and you want to sort the
@oferta array using the numerical value of the fourth element of the
referenced arrays as a primary key and the numerical value of the first
element as a secondary key, then what you want is (untested):

@sorted = sort {
$a->[3] <=> $b->[3] ||
$a->[0] <=> $b->[0]
} @oferta;

This is exactly what I want. Thank you very much.

 
C

ccc31807

This code

@sorted = sort {
    field4($a) <=> field4($b) ||
      field1($a) <=> field1($b)

} @oferta;

simply don't work.

Here is an example of working code (not sorting a hash but an array,
but it shouldn't make any difference):

foreach my $key (sort {
$memberhash->{$a}{'membertype'} cmp $memberhash->{$b}
{'membertype'} ||
$memberhash->{$a}{'last'} cmp $memberhash->{$b}{'last'} ||
$memberhash->{$a}{'first'} cmp $memberhash->{$b}{'first'} }
keys %{$memberhash})

This uses the block style rather than the function style. You might
translate this into an array sort similar to this:

foreach my $element (sort
{
#here is the specific sort criteria, like $a <=> $b
}
@my_array)
{
print "This is the element: $element\n";
push @sorted, $element; #inverse sort
}

CC.
 

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,769
Messages
2,569,581
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top