【发布时间】:2011-08-02 00:08:42
【问题描述】:
除了排序和取第一项之外,有没有办法使用自定义比较函数在数组中找到最小值?
【问题讨论】:
除了排序和取第一项之外,有没有办法使用自定义比较函数在数组中找到最小值?
【问题讨论】:
您可以使用来自List::Util 的reduce 创建一个。
use List::Util qw/reduce/;
$min = reduce { $a < $b ? $a : $b } 1..10 # regular minimum
如果要比较字符串,例如,将< 替换为le(尽管List::Util 也导出minstr)。
【讨论】:
List::Util 也有min 功能,为什么不直接使用呢?
看起来你想要更高阶的函数,也许,切换到函数式语言?
不过不用担心,你可以在 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;
【讨论】:
map 也可以,但我认为在这种情况下没有理由需要高阶函数,甚至没有理由让事情变得更简单。 map 的使用似乎与您使用 Haskell 的愿望相同。