Perl
獲取數組的最大編號
我有一個包含 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; } }