Perl найти минимальное значение с пользовательской функцией сравнения
Есть ли способ найти минимальное значение в массиве с помощью пользовательской функции сравнения, кроме сортировки и получения первого элемента?
2 ответа
Решение
Вы можете создать один, используя reduce
от List::Util
,
use List::Util qw/reduce/;
$min = reduce { $a < $b ? $a : $b } 1..10 # regular minimum
Если вы хотите сравнить строки, например, заменить <
с le
(хотя List::Util
также экспорт minstr
).
Похоже, вы хотите, чтобы функции более высокого порядка, возможно, переключились на функциональный язык?
Но не бойтесь, вы можете смоделировать это в perl или выбрать простое решение:
my $min = shift @yourlist; # or $yourlist[0] if the list must remain intact
# assuming that your compare function is named "lower"
map { $min = $_ if lower($_, min) } @yourlist;