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??
}
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??
}
エレガント
int[] arr = { a, b, c, d, e };
bool b = arr.Distinct().Count() == arr.Length;
効率的
Your code is the most efficient
それがあなたの質問の最も簡単な説明だと思います。
これが最も効率的な方法です。これは必ずしも私が見た中で最も見栄えの良いコードではありませんが、問題なく機能します。データ構造または関数を含む他のソリューションは、より高速になる可能性はほとんどありません。
私はそれを美しさのために再コーディングします:
if (a != b && a != c && a != d && a != e
&& b != c && b != d && b != e
&& c != d && c != e
&& d != e
) {
// Blah blah blah
}
必ずしもそのように正確である必要はありませんが、読むときに目に少し簡単なものです。
私は次のようなことを考えます:
int[] x = new int[] {a,b,c,d,e};
if (x == x.Distinct().ToArray())
{
}
コードゴルフをしている場合は、これをすべて1行にまとめて、6文字を剃ることができます。
bool d = (new int[]{ a, b, c, d, e })
.GroupBy(i => i)
.Where(i => i.Count() > 1)
.Any();