Perl найти минимальное значение с пользовательской функцией сравнения - PullRequest
2 голосов
/ 09 апреля 2011

Есть ли способ найти минимальное значение в массиве с помощью пользовательской функции сравнения, кроме как отсортировать его и взять первый элемент?

Ответы [ 2 ]

6 голосов
/ 09 апреля 2011

Вы можете создать его, используя reduce из List::Util.

use List::Util qw/reduce/;
$min = reduce { $a < $b ? $a : $b } 1..10 # regular minimum

Если вы хотите сравнить строки, например, замените < на le (хотя List::Util также экспортирует minstr).

1 голос
/ 09 апреля 2011

Похоже, вы хотите, чтобы функции более высокого порядка, возможно, переключались на функциональный язык?

Но не бойтесь, вы можете смоделировать его в 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;
...