[Purdue-pm] How to sort one dimension of a 2d array
Rick Westerman
westerman at purdue.edu
Fri Jan 29 07:18:27 PST 2010
On Jan 29, 2010, at 9:15 AM, Phillip San Miguel wrote:
> This is probably pretty straight forward, but:
>
> I have a hash of 2d arrays. I want to sort by numerical value
> across one of these dimensions. What would be the syntax for that?
>
> $table{$colors}[0..num_of_traces-1][0..num_data_points-1]
>
> I want sort the values in the first (traces) dimension.
>
> When I try to write the sort syntax my head starts spinning.
>
> --
>
I found myself floundering as well but then realized that it was
because I was unsure what you wanted. Also because the problem is
difficult!
Using an example and using %t instead of %table, let us say you have:
$t{red}[0,0]
$t{green}[2,0]
$t{blue}[1,0]
$t{blue}[4,0]
$t{red}[2,0]
$t{blue}[0,0]
Do you want the sort to look like:
$t{red}[0,0]
$t{blue}[0,0]
$t{blue}[1,0]
$t{green}[2,0]
$t{red}[2,0]
$t{blue}[4,0]
Or like:
$t{red}[0,0]
$t{red}[2,0]
$t{green}[2,0]
$t{blue}[1,0]
$t{blue}[0,0]
$t{blue}[4,0]
In others all color data jumbled together or per-color data sorted?
Assuming the latter (which makes more sense to me) then I would do
multiple sorts so that the sort would look like:
my %sorted;
@{$sorted{$color}} =
sort { $a->[0] <=> $b->[0] } @{$table{$color}}
foreach my $color (keys %table);
There might be a way to combine the sort into one mega-sort but that
would hurt my brain. Test program (with more data) is enclosed.
Let us know if you want the data sorted in a different way.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: t.pl
Type: text/x-perl-script
Size: 474 bytes
Desc: not available
URL: <http://mail.pm.org/pipermail/purdue-pm/attachments/20100129/a8014b09/attachment.bin>
-------------- next part --------------
-- Rick
More information about the Purdue-pm
mailing list