[英]Why does my Perl max() function always return the first element of the array?
我是Perl的新手,我不想使用List :: Util max
函數來查找給定數組的最大值。
當我測試下面的代碼時,它只返回數組的第一個值,而不是最大值。
sub max
{
my @array = shift;
my $cur = $array[0];
foreach $i (@array)
{
if($i > $cur)
{
$cur = $i;
}
else
{
$cur = $cur;
}
}
return $cur;
}
更換
my @array = shift;
同
my @array = @_;
@_
是包含所有函數參數的數組。 shift
只抓取第一個函數參數並將其從@_中刪除。 更改該代碼,它應該正常工作!
你為什么不想使用有效的東西?
解決此類問題的方法之一是調試數據結構。 在每個步驟中,您都可以打印數據,以查看您所期望的實際數據。 這可以很簡單:
print "array is [@array]\n";
或者對於復雜的數據結構:
use Data::Dumper;
print Dumper( \@array );
在這種情況下,您會看到@array
只有一個元素,因此它必須是最大值。
如果要查看列表賦值和子例程參數的工作方式,請查看Learning Perl 。
您可以將函數編寫為:
#!/usr/bin/perl
use strict; use warnings;
print max(@ARGV);
sub max {
my $max = shift;
$max >= $_ or $max = $_ for @_;
return $max;
}
但是,將它傳遞給數組會更有效,使用List::Util::max
會更高效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.