2012-05-22 202 views
10

我有一個值爲33,32,8,100,的數組。如何在Perl中查找整數數組中的最大值和最小值?

如何找到此數組中的最大值和最小值?

我是否需要包含任何特殊的庫?

+4

這是功課?你有什麼嘗試? –

+2

谷歌搜索有什麼用? – jm666

+1

在這裏提出簡單的問題很好,因爲策劃的答案最終比你可以通過谷歌搜索找到的好。 –

回答

25

List::Utilminmax都很好,

use List::Util qw(min max); 
my $min = min @numbers; 
my $max = max @numbers; 

List::MoreUtilsminmax是更有效的,當你需要在兩者最小值和最大值(因爲它確實比較少)。

use List::MoreUtils qw(minmax); 
my ($min, $max) = minmax @numbers; 

List :: Util是核心的一部分,但List :: MoreUtils不是。

19

您可以使用List::Util要做到這一點很容易,例如。

use List::Util qw(min max); 
my @arr = (33, 32, 8, 100); 
print min(@arr)," ", max(@arr), "\n"; 
+2

+1,因爲此答案由自解釋代碼支持。 :) – verisimilitude

0

使用List::Util module,該建議得到與反正熟悉,就像List::MoreUtils

D:\ :: perl -MList::Util=max -lwe "print max 324, 43, 53, 3532, 43" 
3532 

D:\ :: perl -MList::Util=min -lwe "print min 324, 43, 53, 3532, 43" 
43 
0

List::Util具有「最大」和「最小」,你可以用它來直接找職能給出一個數字列表的最大值和最小值。檢查你是否可以使用它。您也可以對陣列進行排序,然後確定最高和最低編號

1

您應該使用List::Util,它自從v5.7.3起隨Perl發行版一起發佈,因此可能不需要安裝。

use strict; 
use warnings; 

use feature 'say'; 

use List::Util qw/ max min /; 

my @data = (33, 32, 8, 100); 

say min @data; 
say max @data; 

輸出

8 
100 
10

所提供的解決方案是好的,但如果你想實現它自己這是非常簡單的:

use strict; 
use warnings; 

my @array = (33, 32, 8, 100); 
my ($min, $max); 

for (@array) { 
    $min = $_ if !$min || $_ < $min; 
    $max = $_ if !$max || $_ > $max 
}; 

print "min: $min\n"; 
print "max: $max\n"; 
17

不含模塊:

#!/usr/bin/perl 
use strict; 
use warnings; 
my @array = sort { $a <=> $b } qw(33 32 8 100); 
print "min: $array[0]\n"; 
print "max: $array[-1]\n"; 
+2

這花費了一些時間排序值,它們可能已經遇到的最小值和最大值之間,應該只花O(N)時間取O(N log N)時間。 – hepcat72

1

當然,如果你希望同時獲得列表的最大值和最小值,那麼一次獲取兩者的效率會更高;它只需要對每2項數據執行3次比較,而不是4次。如果數據集足夠大,這可能很重要。

List::Util不提供minmax功能,但List::MoreUtils確實。

use strict; 
use warnings; 
use feature qw(say); 

use List::MoreUtils qw(minmax); 

my ($min, $max) = minmax @data; 

say $min; 
say $max; 
+0

其實我剛剛看到ikegami已經給了上面的'List :: MoreUtils'答案。對不起。 – LeoNerd

1

對於數字:

my ($min,$max) = (sort {$a <=> $b} @array)[0,-1]; 

對於字符串:

my ($min,$max) = (sort {$a cmp $b} @array)[0,-1]; 
2

您可以使用地圖要做到這一點,而無需庫:

my @array = (33, 32, 8, 100); 
my ($max,$min)=(-1e99,1e99); # Initialize to values outside anything in your list 
map {$max=$_ if ($_>$max); $min=$_ if($_<$min);} @array; 
print "max=$max, min=$min\n"; 
相關問題