1

5つの変数がある場合

int a,b,c,d,e;

それらがすべて一意であることを確認するための最も効率的な方法は何ですか?

if(a!=b && a!=c && a!=d && a!=e && b!=c && b!=d && b!=e && c!=d && c!=e && d!=e)
{ 
   //Is this the most efficient way??
}
4

4 に答える 4

11

エレガント

int[] arr = { a, b, c, d, e };

bool b = arr.Distinct().Count() == arr.Length;

効率的

Your code is the most efficient

それがあなたの質問の最も簡単な説明だと思います。

于 2012-05-22T03:03:35.560 に答える
7

これ最も効率的な方法です。これは必ずしも私が見た中で最も見栄えの良いコードではありませんが、問題なく機能します。データ構造または関数を含む他のソリューションは、より高速になる可能性はほとんどありません。

私はそれを美しさのために再コーディングします:

if (a != b && a != c && a != d && a != e
           && b != c && b != d && b != e
                     && c != d && c != e
                               && d != e
) { 
    // Blah blah blah
}

必ずしもそのように正確である必要はありませんが、読むときに目に少し簡単なものです。

于 2012-05-22T03:04:32.147 に答える
1

私は次のようなことを考えます:

int[] x = new int[] {a,b,c,d,e};
if (x == x.Distinct().ToArray())
{
}
于 2012-05-22T03:08:01.070 に答える
1

コードゴルフをしている場合は、これをすべて1行にまとめて、6文字を剃ることができます。

bool d = (new int[]{ a, b, c, d, e })
              .GroupBy(i => i)
              .Where(i => i.Count() > 1)
              .Any();
于 2012-05-22T03:47:31.690 に答える