Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
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 perusing the Monastery: (7)
As of 2014-11-23 19:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (134 votes), past polls