#!/usr/bin/perl use strict; use warnings; my @myarray = (2.5 ,4.8, 3.2, 8.5, 8.2, 12.5); my %value_map; my $counter = @myarray; for my $key (sort {$b <=> $a} @myarray) { $value_map{$key} = $key*6/$counter--; } for my $key (@myarray) { print "$key\t-> $value_map{$key}\n"; }
Note I have not had to cache any intermediate results - you certainly could if you wanted too, so long as you do not change @myarray.
If the values are not unique, I think the most prudent approach is using two hashes keyed equivalently, probably with 1 .. @myarray.If your array values are not guaranteed unique, sorted indices as per BrowserUK's suggestion is a stronger choice.
In reply to Re: Restore the original order of an array after sort and performing some funchtion on array values
by kennethk
in thread Restore the original order of an array after sort and performing some funchtion on array values
by sesemin
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |