Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

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 (Prior) 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
[Eily]: you could have tried randomly swapping your fingers
[Eily]: enigma style
[choroba]: so it was you who typed the whole phrases?
[Yaerox]: I feel like i'm not seeing the forest for the trees. Can someone give me a hint how to research converting all kinds of files into ansi? If origin file is utf8 convert to ansi, is origin file is ansi then skip file.

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (17)
As of 2017-03-28 13:09 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (331 votes). Check out past polls.