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;
Другие вопросы по тегам