21

値が33, 32, 8, 100の配列があります。

この配列の最大値と最小値を見つけるにはどうすればよいですか?

特別なライブラリを含める必要がありますか?

4

12 に答える 12

40

List::Utilminは問題ありませんmaxが、

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

ただし、最小値と最大値の両方が必要な場合は、 List::MoreUtilsの方が効率的です (比較が少ないため)。minmax

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

List::Util はコアの一部ですが、List::MoreUtils はそうではありません。

于 2012-05-22T15:33:18.333 に答える
22

モジュールなし:

#!/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";
于 2012-05-22T13:50:45.887 に答える
21

List::Utilこれを簡単に行うために使用できます。

use List::Util qw(min max);
my @arr = (33, 32, 8, 100);
print min(@arr)," ", max(@arr), "\n";
于 2012-05-22T11:38:00.797 に答える
16

提供されているソリューションは優れていますが、自分で実装したい場合は非常に簡単です。

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";
于 2012-05-22T13:44:18.877 に答える
3

数字の場合:

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

文字列の場合:

    my ($min,$max) = (sort {$a cmp $b} @array)[0,-1];
于 2015-07-06T19:41:02.130 に答える
2

ライブラリを必要とせずに map を使用してこれを行うことができます。

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";
于 2015-10-02T09:25:10.033 に答える
1

もちろん、リストの最大値と最小値の両方が同時に必要な場合は、両方を一度に取得する方が効率的です。データの 2 項目ごとに 4 回ではなく 3 回の順序比較を実行するだけで済みます。これは、データ セットが十分に大きい場合に問題になる可能性があります。

List::Utilminmax機能を提供しませんが提供List::MoreUtilsします。

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

use List::MoreUtils qw( minmax );

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

say $min;
say $max;
于 2012-05-23T15:07:04.253 に答える
1

v5.7.3 以降の Perl ディストリビューションでリリースされているものを使用するList::Util必要があるため、おそらくインストールする必要はありません。

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
于 2012-05-22T11:40:18.863 に答える
0

List::Utilはあなたが探しているものだと思います。

于 2012-05-22T11:37:56.347 に答える
0

Statistics::Liteを使用して最小値、最大値などを計算できます

于 2012-05-22T11:37:58.823 に答える
0

List::Util次のように、モジュールを使用してください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
于 2012-05-22T11:38:11.140 に答える
0

List::Utilには、指定された数値のリストから最大値と最小値を直接見つけるために使用できる "max" および "min" 関数があります。使用できるかどうかを確認してください。配列を並べ替えて、最大数と最小数を決定することもできます

于 2012-05-22T11:38:17.870 に答える