in reply to Restore the original order of an array after sort and performing some funchtion on array values

Are your values in @myarray unique? This has a direct impact since the simplest way to maintain a mapping in Perl is using a hash where keys must be unique. If they are, you can accomplish all you have above with:

#!/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.

  • Comment on Re: Restore the original order of an array after sort and performing some funchtion on array values
  • Select or Download Code