簡體   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