Perl使用自定义比较函数查找最小值
除了排序和获取第一项之外,是否有其他方法可以使用自定义比较函数在数组中查找最小值?您可以使用Perl使用自定义比较函数查找最小值,perl,min,Perl,Min,除了排序和获取第一项之外,是否有其他方法可以使用自定义比较函数在数组中查找最小值?您可以使用列表::Util中的reduce创建一个 use List::Util qw/reduce/; $min = reduce { $a < $b ? $a : $b } 1..10 # regular minimum use List::Util qw/reduce/; $min=减少{$a
列表::Util中的reduce
创建一个
use List::Util qw/reduce/;
$min = reduce { $a < $b ? $a : $b } 1..10 # regular minimum
use List::Util qw/reduce/;
$min=减少{$a<$b?$a:$b}1..10#规则最小值
例如,如果您想要比较字符串,替换看起来您想要更高阶的函数,也许可以切换到函数语言
但不要担心,您可以用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;
Perl是一种函数语言。当然,这不是一个纯粹的循环,但它确实是。你为什么要使用映射而不是for循环?@daxim-我知道,思想、语法问题和性能使它几乎不可能这样使用。当然,最大的障碍是它缺少一个健全的类型系统——虽然这不是函数式语言的要求,但它确实让函数式编程变得非常棒。不要把这看作是反Perl的鼓吹——我自己是一个老Perl黑客,但我认为有时有更好的方法来做某些事情。@Tim:有不止一种方法,你知道:)-在这种情况下,我觉得下一个功能解决方案是很自然的。或者也许我最近做了太多的Haskell,所以我没有想到像循环这样的命令式构造。@Ingo:当然,map
也同样有效,但我认为没有理由需要更高阶的函数,甚至没有理由在这种情况下简化事情。map
的使用似乎与您使用Haskell的愿望有着相同的渊源。List::Util
也有min
函数,为什么不直接使用它呢?@wk:OP寻求一种自定义比较函数的方法。