Mam tablicę z wartościami 33, 32, 8, 100.Jak znaleźć maksymalną i minimalną wartość w tablicy liczb całkowitych w Perlu?
Jak mogę znaleźć maksymalną i minimalną wartość w tej tablicy?
Czy muszę dołączyć jakieś specjalne biblioteki?
Mam tablicę z wartościami 33, 32, 8, 100.Jak znaleźć maksymalną i minimalną wartość w tablicy liczb całkowitych w Perlu?
Jak mogę znaleźć maksymalną i minimalną wartość w tej tablicy?
Czy muszę dołączyć jakieś specjalne biblioteki?
List::Util 's min
i max
są w porządku,
use List::Util qw(min max);
my $min = min @numbers;
my $max = max @numbers;
Ale List::MoreUtils' s minmax
jest bardziej efektywne, gdy trzeba zarówno min i max (bo ma mniej porównań).
use List::MoreUtils qw(minmax);
my ($min, $max) = minmax @numbers;
Lista :: Util jest częścią core, ale List :: MoreUtils nie jest.
Myślę, że List::Util jest tym, czego szukasz.
Można użyć Statistics::Lite obliczyć min, max itp
Można użyć List::Util
to zrobić z łatwością, np.
use List::Util qw(min max);
my @arr = (33, 32, 8, 100);
print min(@arr)," ", max(@arr), "\n";
+1, ponieważ ta odpowiedź jest obsługiwana przez samoistniejący kod. :) – verisimilitude
Użyj List::Util
module, który zaleca się zapoznanie się z tak, jak 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
List::Util ma „Max” i funkcji „Min”, które można wykorzystać do bezpośredniego znaleźć maksymalna i minimalna lista numerów. Sprawdź, czy możesz tego użyć. Możesz także posortować tablicę, a następnie określić najwyższy i najniższy numer:
Powinieneś użyć List::Util
, który został wydany z dystrybucją Perla od wersji 5.7.3, więc prawdopodobnie nie wymaga instalacji.
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;
wyjście
8
100
Dostarczone rozwiązania są dobre, ale jeśli chcesz je realizować się to całkiem proste:
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";
Bez modułów:
#!/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";
Spędza trochę czasu na porządkowaniu wartości, które znajdują się pomiędzy min & max, które mogło już wystąpić, biorąc czas O (N log N), kiedy to powinno zająć tylko O (N). – hepcat72
Oczywiście, jeśli chcesz jednocześnie mieć maksymalną i minimalną wartość listy, bardziej wydajne jest pobieranie obydwu naraz; musi tylko wykonać 3 porównania zamówień na 2 elementy danych, zamiast 4. Może to mieć znaczenie, jeśli zbiory danych są wystarczająco duże.
List::Util
nie zapewnia funkcji minmax
, ale robi to List::MoreUtils
.
use strict;
use warnings;
use feature qw(say);
use List::MoreUtils qw(minmax);
my ($min, $max) = minmax @data;
say $min;
say $max;
Właściwie to właśnie widziałem ikegami dało powyżej odpowiedź "List :: MoreUtils". Przepraszam za dupę. – LeoNerd
Dla liczb:
my ($min,$max) = (sort {$a <=> $b} @array)[0,-1];
Dla strun:
my ($min,$max) = (sort {$a cmp $b} @array)[0,-1];
Można użyć mapy, aby to zrobić bez potrzeby biblioteki:
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";
Czy to zadanie domowe? Co próbujesz? –
Co powiesz na nieco google? – jm666
To proste, że masz proste pytania na ten temat, ponieważ otrzymane odpowiedzi są znacznie lepsze niż te, które można znaleźć w Google. –