Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

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 (Parson) 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 the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2016-09-25 00:36 GMT
Find Nodes?
    Voting Booth?
    Extraterrestrials haven't visited the Earth yet because:

    Results (462 votes). Check out past polls.