C# 确定许多变量是否唯一的最优雅/有效的方法是什么?

C# 确定许多变量是否唯一的最优雅/有效的方法是什么?,c#,C#,如果我有五个变量 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[]

如果我有五个变量

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
高效

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

bool b = arr.Distinct().Count() == arr.Length;
Your code is the most efficient

我想这是对你的问题最简单的解释。

优雅

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

bool b = arr.Distinct().Count() == arr.Length;
Your code is the most efficient
高效

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
}
不一定完全是这样,只是阅读时眼睛容易一点。

这几乎是最有效的方法。这不一定是我见过的最漂亮的代码,但它会工作得很好。任何涉及数据结构或函数的其他解决方案都不可能更快

不过,我还是会为美丽重新编码:

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())
{
}

我会这样想:

int[] x = new int[] {a,b,c,d,e};
if (x == x.Distinct().ToArray())
{
}

如果我们在玩代码高尔夫,我们可以将这一切简化为一行,并剃掉6个字符:

bool d = (new int[]{ a, b, c, d, e })
              .GroupBy(i => i)
              .Where(i => i.Count() > 1)
              .Any();

如果我们在玩代码高尔夫,我们可以将这一切简化为一行,并剃掉6个字符:

bool d = (new int[]{ a, b, c, d, e })
              .GroupBy(i => i)
              .Where(i => i.Count() > 1)
              .Any();

对于五个变量,它可能是。但是对于较大的集合,哈希表会更快。Concur,@Ben,但问题特别指出“如果我有五个变量”。对于五个变量,可能会更快。但是对于较大的集合,哈希表会更快。Concur,@Ben,但问题特别指出“如果我有五个变量”。这很容易编码,它的作用也很清楚,但它与最有效的测试不同。@TedHopp:OP的
最有效的测试
将在变量数量增加时失败<给一个人一条鱼,他就可以吃一天。教一个人钓鱼,他就会吃一辈子。OP特别要求进行涉及五个变量的最有效测试,而不是针对N个变量的稳健方法。我更喜欢“给一个人一把火,他晚上会暖和。点燃他,他余生都会暖和。”:-)根据记忆,我想那是Discworld或Pratchett的作品。在任何情况下,这个答案都与问题的优雅部分相匹配,所以它仍然很有用。如果你的方法中有20、30或50个变量,你可能会重新考虑这个设计:)这很容易编码,它的作用也很清楚,但它与最有效的测试完全不同。@TedHopp:OP的
最有效的测试
,如果变量数量增加,将失败<给一个人一条鱼,他就可以吃一天。教一个人钓鱼,他就会吃一辈子。OP特别要求进行涉及五个变量的最有效测试,而不是针对N个变量的稳健方法。我更喜欢“给一个人一把火,他晚上会暖和。点燃他,他余生都会暖和。”:-)根据记忆,我想那是Discworld或Pratchett的作品。在任何情况下,这个答案都与问题的优雅部分相匹配,因此它仍然很有用。如果您的方法中有20、30或50个变量,您可能会重新考虑这种设计:)在
之后使用
.ToArray()
as将返回
IEnumerable
OK。效率不好,优雅好。效率不好。