这是一个最佳实践问题.
我只见过数字排序例程中使用的Perl太空飞船运算符(<=>).但它在其他情况下似乎很有用.我只是想不出实际用途.
任何人都可以举例说明它何时可以在Perl排序之外使用?
我正在为机器人乔编写一个控制系统,想要去机器人玛丽并给她充电.它们沿着线上的整数点移动.Joe从$ j开始,每个时间单位可以向任何方向行走1米.玛丽仍站在$ m,无法动弹 - 她需要充好的充电!控制程序看起来像这样:
while ($m != $j) { $j += ($m <=> $j); }
该<=>
运营商将是一个有用的二进制搜索算法.大多数编程语言都没有进行三向比较的运算符,这使得每次迭代需要进行两次比较.有了<=>
你可以做只有一个.
sub binary_search { my $value = shift; my $array = shift; my $low = 0; my $high = $#$array; while ($low <= $high) { my $mid = $low + int(($high - $low) / 2); given ($array->[$mid] <=> $value) { when (-1) { $low = $mid + 1 } when ( 1) { $high = $mid - 1 } when ( 0) { return $mid } } } return; }