Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: min and mindex

by Kenosis (Priest)
on Nov 06, 2012 at 17:37 UTC ( #1002538=note: print w/ replies, xml ) Need Help??


in reply to min and mindex

Given your one-to-one mapping between the two arrays (i.e., the same number of elements) and the numbers in @array1 are not repeated, consider the following:

use strict; use warnings; use List::Util 'min'; my %hash; my @array1 = ( 5, 2, 3, 4, 1, 6, 7 ); my @array2 = ( "a", "b", "c", "d", "e", "f", "g" ); my %array1Hash = map { $array1[$_] => $_ } 0 .. $#array1; @hash{@array1} = @array2; my $array1Min = min @array1; print 'The minimum value in @array1 is ', $array1Min, ".\n"; print 'The position of ', $array1Min, ' in @array1 is ', $array1Hash{$array1Min}, ".\n"; print 'The element in @array2 at position ', $array1Min, ' is ', $hash{ min @array1 }, '.';

Output:

The minimum value in @array1 is 1. The position of 1 in @array1 is 4. The element in @array2 at position 1 is e.

Two hashes are created. The first (%array1Hash) pairs each element of @array1 with its position in the array. The second (%hash) pairs the elements of @array1 as the keys with the elements of @array2 as values. When you've found the minimum value in @array1, you can use it as the key to get the associated value from @array2.

Hope this helps!

Update: Added printing the min val of @array1 and that element's position in the array.


Comment on Re: min and mindex
Select or Download Code
Re^2: min and mindex
by Anonymous Monk on Nov 06, 2012 at 18:15 UTC
    I like this example. What would you do if the values in array1 were not unique?

      Perhaps something like the following:

      use strict; use warnings; use List::Util 'min'; my %array1Hash; my @array1 = ( 5, 2, 1, 4, 1, 6, 7 ); my @array2 = ( "a", "b", "c", "d", "e", "f", "g" ); push @{ $array1Hash{ $array1[$_] } }, $_ for 0 .. $#array1; my %array2Hash = map { $_ => $array2[$_] } 0 .. $#array2; my $array1Min = min @array1; my $positions = join ', ', @{ $array1Hash{$array1Min} }; my $elements = join ', ', map $array2Hash{$_}, @{ $array1Hash{$array1 +Min} }; print 'The minimum value in @array1 is ', "$array1Min.\n"; print 'The position(s) of ', $array1Min, ' in @array1: ', "$positions. +\n"; print 'The element(s) in @array2 at position(s) ', "$positions: $eleme +nts.";

      Output:

      The minimum value in @array1 is 1. The position(s) of 1 in @array1: 2, 4. The element(s) in @array2 at position(s) 2, 4: c, e.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1002538]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2015-07-04 18:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls