2016-04-05 17 views
0

Sıralamada minimum değeri seçen perl kodum var, ancak bir değer 0 ise göz ardı edilmemelidir. Bu filtreleme fonksiyonu olarak sıralama:Perl süzgeçleme ile minimum değerleri sıralama

sub desc_Emin 
{ 
my($emin)=(sort{$b<=>$a} @_)[-1]; 
return $emin; 
} 

Bu işlev olarak adlandırılır ve alır değerler: [o sıralama sonra

descs_a descs_b descs_c 
1  4  5 
0  1  3 
0  0  0 
2  2  0 

: Örneğin

$desc_mv[$n]=desc_Emin($descs_a[$n],$descs_b[$n],$descs_c[$n]); 

, listesi vardır $ desc_mv] şu gibi olmalıdır:

Çok sayıda "if" ifadesi eklemeden nasıl filtre uygulayabilirsiniz? Bölüm "... $ desc_mv [$ n] = desc_Emin (" içinde sıfırları filtrelemek için iyidir

My hızlı zamansal çözüm gibi görünür:?.

  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]); 
      } 
+0

kullanmanız gereken bir şey bulmanız gerektiğinde 'grep/harita/''' '' '' ',' '' '' 'dır, –

+0

@ OlegV.Volkov Ama sayısal değerlerim var, neden grep ve haritayı kullanmalıyım?' $ descs _a [1] 'zaten' 1' ve '$ descs_c [1]' '' dır. Kod benim tarafımdan yazılmadı - kullanıyorum ve bu hatayı düzeltmeye çalışıyorum. – XuMuK

+0

Sorunu anlamıyorum. Bir şekilde 'grep' dizeleri için mi düşünüyorsun? Hayır değil. –

cevap

2

Bir şeyleri overcomplicating ediyoruz İhtiyacınız ., tüm değerleri üzerinde tarama 0 atlamak ve daha önce hatırlanan küçükse her yeni değeri hatırlamak Sadece Perl, tam olarak bu yazmaları:

sub desc_Emin { 
    my $min = 0; 
    for my $val (@_) { 
     # if we're remembering 0, replace it with anything OR (if new value is not 0 and smaller than what we remember, remember that) 
     if ($min == 0 || ($val != 0 && $min > $val)) { $min = $val } 
    } 
    return $min; 
} 
+0

Bu tam olarak arıyordum. – XuMuK

İlgili konular