精通的方法来检查3个变量是否都是唯一的

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)


Hun*_*len 8

您可以使用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)

  • 当公共模块中已存在uniq函数时,为什么还要编写自己的uniq函数. (3认同)