Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

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

Replies are listed 'Best First'.
Re: sort array table
by poj (Monsignor) 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

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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1036592]
Approved by ww
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (8)
As of 2018-01-19 15:38 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (221 votes). Check out past polls.