Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl使用自定义比较函数查找最小值_Perl_Min - Fatal编程技术网

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寻求一种自定义比较函数的方法。