use*_*853 5 algorithm optimization perl
我想编写一个脚本来检查3个变量(A,B,C)是否都是唯一的并且彼此不相等.我想过做一个很大的if语句,如:
if (A != B) && (A != C) && (B != C){
// do function }
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有另一种方式?因为代码看起来很笨重.这是Perl.
ike*_*ami 10
抽象复杂的细节(例如那些"看起来很笨拙")是潜艇的要点.如果您不喜欢看到它,请将逻辑移动到子.就个人而言,对于我来说,三个变量看起来很好.
请注意,如果要将代码移动到子代码,则可以考虑使用O(N)算法.您目前的方法规模很小(O(N 2)).
sub are_distinct {
my %seen;
++$seen{$_} for @_;
return keys(%seen) == @_;
}
Run Code Online (Sandbox Code Playgroud)
优化退出尽快:
sub are_distinct {
my %seen;
for (@_) {
return 0 if $seen{$_}++;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用uniq函数List::MoreUtils获取所有唯一元素,然后将长度与原始元素数进行比较.
#!/usr/bin/perl
use strict;
use warnings;
use List::MoreUtils qw(uniq);
my ($A, $B, $C) = (1, 2, 3);
my @elems = ($A, $B, $C);
if ( uniq(@elems) == @elems ) {
# do function
}
Run Code Online (Sandbox Code Playgroud)