繁体   English   中英

为什么我的Perl max()函数总是返回数组的第一个元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM