Beefy Boxes and Bandwidth Generously Provided by pair Networks Russ
There's more than one way to do things
 
PerlMonks  

sort array table

by welle (Beadle)
on Jun 02, 2013 at 15:13 UTC ( #1036592=perlquestion: print w/ replies, xml ) Need Help??
welle has asked for the wisdom of the Perl Monks concerning the following question:

Dear monks

I have a small set of records (like a table) stored in an array. I need to sort the array alphabetiacally according to the values in one particolar row. The array structure *should* be something like this

sentence1 attribute1 value1
sentence2 attribute2 value2
sentence3 attribute3 value3

What is wrong with this?

foreach my $sentence(@sentences){ #$attribute and $values come from other subrutines push(@array, ($sentence, $attribute, $value)); } my $selected_order=1;#order according to $attribute sort { $a->[$selected_order] cmp $b->[$selected_order] } @array; print @array;

I think, I'm confusing something with the array...

UPDATE: the problem is of course the array. Looking at it's content with use Data::Dumper; it clearly shows that the intended table structure is not mantained...

Comment on sort array table
Download Code
Re: sort array table
by poj (Curate) on Jun 02, 2013 at 15:48 UTC
    You need to push array refs to @array to build a 2-dimensional array, retain the results of the sort and dereference to get the values.
    #!perl use strict; my @array=(); while (<DATA>){ chomp; my ($sentence, $attribute, $value) = split; # use [] not () to push array refs push @array,[$sentence,$attribute,$value]; } my $selected_order=1; #order according to $attribute # retain the result of sort in new array my @sorted_array = sort { $a->[$selected_order] cmp $b->[$selected_ord +er] } @array; # or use existing # @array = sort { $a->[$selected_order] cmp $b->[$selected_order] } @a +rray; # get values from sorted array # by dereferencing for my $record (@sorted_array){ print "@$record\n" }; __DATA__ sentence1 attribute3 value2 sentence2 attribute2 value1 sentence3 attribute1 value3
    poj

      It works perfectly. Thank you for the line by line explaination!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1036592]
Approved by ww
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (18)
As of 2014-04-23 09:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (541 votes), past polls