Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > Sorting an array

Reply
Thread Tools

Sorting an array

 
 
gamo
Guest
Posts: n/a
 
      12-18-2009

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.


--
http://www.telecable.es/personales/gamo/
Honesta turpitudo est pro causa bona --Publilius Syrus
"Was it a car or a cat I saw?"
perl -E 'say 111_111_111**2;'
 
Reply With Quote
 
 
 
 
Jürgen Exner
Guest
Posts: n/a
 
      12-18-2009
gamo <> wrote:
>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
 
Reply With Quote
 
 
 
 
gamo
Guest
Posts: n/a
 
      12-18-2009
On Fri, 18 Dec 2009, Jürgen Exner wrote:

> gamo <> wrote:
> >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
>


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

--
http://www.telecable.es/personales/gamo/
Honesta turpitudo est pro causa bona --Publilius Syrus
"Was it a car or a cat I saw?"
perl -E 'say 111_111_111**2;'
 
Reply With Quote
 
Jürgen Exner
Guest
Posts: n/a
 
      12-19-2009
gamo <> wrote:
>On Fri, 18 Dec 2009, Jürgen Exner wrote:
>
>> gamo <> wrote:
>> >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.

>
>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
 
Reply With Quote
 
Jim Gibson
Guest
Posts: n/a
 
      12-19-2009
In article <>, gamo
<> wrote:

> On Fri, 18 Dec 2009, J¸rgen Exner wrote:
>
> > gamo <> wrote:
> > >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.


>
> 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;

--
Jim Gibson
 
Reply With Quote
 
gamo
Guest
Posts: n/a
 
      12-19-2009
On Fri, 18 Dec 2009, Jim Gibson wrote:

> In article <>, gamo
> <> wrote:
>
> > On Fri, 18 Dec 2009, J¸rgen Exner wrote:
> >
> > > gamo <> wrote:
> > > >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.

>
> >
> > 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.


> --
> Jim Gibson
>


--
http://www.telecable.es/personales/gamo/
Honesta turpitudo est pro causa bona --Publilius Syrus
"Was it a car or a cat I saw?"
perl -E 'say 111_111_111**2;'
 
Reply With Quote
 
ccc31807
Guest
Posts: n/a
 
      12-19-2009
On Dec 18, 5:38*pm, gamo <g...@telecable.es> wrote:
> 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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Sorting list vs sorting vector boltar2003@boltar.world C++ 2 07-06-2010 09:40 AM
Re: Array objects get changed when sorting the array Roedy Green Java 1 06-25-2009 08:25 PM
Re: Array objects get changed when sorting the array markspace Java 1 06-25-2009 06:22 PM
Sorting array against other array Andrew Poulos Javascript 4 01-23-2007 05:49 AM
Sorting through an array of an array Dominic Son Ruby 5 10-13-2006 11:13 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57