Ich habe den Perl-Code, wo Sortierung den minimalen Wert wählt, aber wenn der eine Wert 0 ist, sollte es ignoriert werden. Diese Funktion ohne Filterung Sortierung:Perl, das minimale Werte mit filternden Nullen sortiert
sub desc_Emin
{
my($emin)=(sort{$b<=>$a} @_)[-1];
return $emin;
}
Und diese Funktion aufgerufen wird und nehmen Werte:
$desc_mv[$n]=desc_Emin($descs_a[$n],$descs_b[$n],$descs_c[$n]);
Zum Beispiel gibt es die Liste:
descs_a descs_b descs_c
1 4 5
0 1 3
0 0 0
2 2 0
Nachdem es sorting [ $ desc_mv] sollte sein:
1
1
0
2
Wie filtern, ohne eine Menge 'if' Anweisungen hinzuzufügen? Es ist besser, filtern Nullen in der "$ desc_mv [$ n] = desc_Emin (..." Teil
Meine schnelle zeitliche Lösung sieht so aus:?.
if($descs_a[$n] == $descs_b[$n] and $descs_b[$n] == $descs_c[$n]){
$desc_mv[$n]=$descs_a[$n];
}
else{
use Switch;
switch($descs_a[$n]){
case 0 {$descs_a[$n] = 99999999999999};
}
use Switch;
switch($descs_b[$n]){
case 0 {$descs_b[$n] = 99999999999999};
}
use Switch;
switch($descs_c[$n]){
case 0 {$descs_c[$n] = 99999999999999};
}
$desc_mv[$n]=desc_Emin($descs_a[$n],$descs_b[$n],$descs_c[$n]);
}
wenn Sie etwas finden müssen, sollten Sie 'grep/Karte verwenden/for', not 'sort'. –
@ OlegV.Volkov Aber ich habe numerische Werte, warum sollte ich Grep und Karte verwenden?' $ descs _a [1] 'ist bereits' 1' und '$ descs_c [1]' ist '0'. Der Code wurde nicht von mir geschrieben - ich benutze ihn und versuche diesen Fehler zu beheben. – XuMuK
Ich bekomme deine Frage nicht. Denkst du irgendwie, 'Grep' ist für Streicher? Nein, ist es nicht. –