Perl

獲取數組的最大編號

  • August 5, 2016

我有一個包含 2 x 2 數組的文件。

數據

1: 6.1703
541.631 46.0391

2: 6.1930
537.446 45.9239

3: 6.1931
177.171 288.579

4: 6.1939
167.171 298.579

5: 8.2281
533.686 53.7245

6: 8.6437
519.219 65.0547

7: 9.0823
484.191 95.0753

8: 9.3884
237.75 240.082

9: 9.4701
167.525 246.234

10: 9.7268
411.929 70.7877

我需要查看每個矩陣的位置(1,2)的值,如果它接近6.1937並且在元素(2,1)中具有較大的值,則選擇它。在此範例中,選擇的值應為 6.1930。(這部分已解決如何根據選擇比較標準記錄數組元素的數量

其次,我需要選擇每個矩陣的位置(2,2)的最大值,然後列印對應的(1,2)元素。在這種情況下,選擇的值為6.1939(THIS PART NEED TO BE MODIFIED IN劇本)

該解決方案之前曾針對類似問題發布過:

解決方案

#!/usr/bin/perl
use warnings;
use strict;

my $close_to = 6.1937;

my ($close, $lowest);

$/ = q();
while (<>) {
   my @arr = split;
   if ((! defined $close || abs($arr[1] - $close_to) < abs($close - $close_to))
       && $arr[2] > $arr[3]
       ) {
       $close = $arr[1];
   }
   if ((! defined $lowest || $arr[1] < $lowest)
       && $arr[2] < $arr[3]
       ) {
       $lowest = $arr[1];
   }
   if (eof) {
       print "$close $lowest\n";
       undef $close;
       undef $lowest;
   }
}

我認為需要在這部分腳本中進行修改,但我不知道如何去做。

if ((! defined $lowest || $arr[1] < $lowest)
      && $arr[2] < $arr[3]
       ) {
      $lowest = $arr[1];
}

數據的輸出必須是:

6.1930  6.1939

您確實需要更改那部分程式碼。問題是您現在需要儲存兩個值:目前找到的最高值和對應的 (1,2) 元素。

#!/usr/bin/perl
use warnings;
use strict;

my $close_to = 6.1937;

my ($close, $highest, $corr_highest);

$/ = q();
while (<>) {
   my @arr = split;
   if ((! defined $close || abs($arr[1] - $close_to) < abs($close - $close_to))
       && $arr[2] > $arr[3]
       ) {
       $close = $arr[1];
   }
   if (! defined $highest || $arr[3] > $highest) {
       ($highest, $corr_highest) = @arr[3, 1];

   }
   if (eof) {
       print "$close $corr_highest\n";
       undef $_ for $close, $highest, $corr_highest;
   }
}

引用自:https://unix.stackexchange.com/questions/301481