2017-10-24 4 views
0

Ich habe 3 Arrays @energy, @es_energy and @hb_energy von denen jeweils mit dem gleichen Namen Begriff [$k] indexiert wurden.Finden Index des niedrigsten Wertes in Array

Ich möchte den niedrigsten Wert in @energy finden und dann mit diesem Indexwert für die entsprechenden Werte in den anderen Arrays suchen.

Derzeit verwende ich my $n = nmin_by { $energy[$_] } 0 .. $#energy;

Und dann $n zur Ausgabe von dem anderen Arrays verwendet. Ich möchte jedoch nicht nmin_by verwenden, da es eine zusätzliche Bibliothek zum Herunterladen für das von mir verwendete Softwarepaket erfordert (viele Verwaltungsprobleme).

Irgendwelche Vorschläge?

+0

Wenn 'nmin_by' reiner Perl-Code ist, kopieren Sie ihn einfach in Ihren Code. Andernfalls erstellen Sie Ihre eigene nmin_by-Funktion. – toolic

+1

Welche Bibliothek? Was meinst du mit "name term"? – choroba

+0

Ich meinte Indexnummer! – AlexAMP

Antwort

5

Verwenden List::Util::reduce

use warnings; 
use strict; 
use feature 'say'; 

use List::Util qw(reduce); 

my @ary = (12, 3, 1, 23); 

my $min_idx = reduce { $ary[$a] < $ary[$b] ? $a : $b } 0..$#ary; 

say $min_idx; 

dies so in einem Unter Setzen, dass die Umsetzung aus den Augen, während der Name verdeutlicht den Zweck

use Carp; 

sub get_min_idx { 
    my $ra = shift; 
    croak "Sub expects array reference" if ref $ra ne 'ARRAY'; 
    return reduce { $ra->[$a] < $ra->[$b] ? $a : $b } 0..$#$ra; 
} 

my $min_idx = get_min_idx(\@ary); 

Tuck es weg in einem Modul und Sie kann auch ändern, wie es mit minimalem Eindringen funktioniert.

Die Fehlermeldung kann ausgearbeitet werden (sagen Sie dem Benutzer, was zum Beispiel übergeben wurde) und Prüfungen hinzugefügt; Zum einen, angesichts der numerischen < Vergleich benötigt das Sub ein Array mit nur Zahlen.

Syntax clafirication: der Index des letzten Elements einer ArrayRef $rary$#$rary ist (während der Index des letzten Elements einer Anordnung @ary ist $#ary).

Wählen Sie Ihren Unterprogrammnamen sorgfältig aus; Einen guten Namen zu haben, hilft sehr.

Dank Borodin für die Notwendigkeit zu kommentieren.

+0

Ist List :: Util Teil der Perl-Standardbibliothek? – AlexAMP

+0

@AlexAMP Ja ist es. Wenn Sie zu dem Link gehen, den ich in der Antwort angegeben habe, sehen Sie, dass es sich um "perldoc" - Perls Dokumentation handelt. Das sagt Ihnen, dass es in "core" (installiert mit Perl) ist. – zdim

+0

AHHH IT WORKS: D Vielen Dank !!! Das löst so viele Probleme! – AlexAMP

Verwandte Themen