假设我有五个必须全部唯一的整数值。
int a;
int b;
int c;
int d;
int e;
显然我可以做这样的事情来测试:
if (a == b) {
return false;
} else if (a == c) {
return false;
} else if (a == d) {
return false;
}
//etc etc
但在我看来,这会造成极其混乱的代码。是否有“更清洁”的方法来做到这一点?
答案 0 :(得分:6)
您可以将所有值放在一个集合中,并确保该集合的基数等于您放入的值的数量:
ISet<int> vals = new HashSet<int> {
a, b, c, d, e
};
if (vals.Count != 5) {
Console.WriteLine("All values must be unique");
}
答案 1 :(得分:3)
可能有点开销,但你可以这样做:
new [] {a, b, c, d, e}.Distinct().Count() == 5
答案 2 :(得分:2)
List<int>() list = new List<int>(){a,b,c,d,e};
bool unique = list.Count() == list.Distinct().Count();
答案 3 :(得分:2)
未经测试,但你也可以制作一个这样的辅助方法:
static bool AreDistinct<T>(params T[] vals)
{
for(int i = 0; i < vals.Length - 1; i++)
for(int j = i + 1; j < vals.Length; j++)
if(vals[i].Equals(vals[j]))
return false;
return true;
}
并称之为:
AreDistinct(a, b, c, d, e)
答案 4 :(得分:1)
List<int> elements = new List<int>(){a,b,c,d,e};
if (elements.Distinct().Count() == elements.Count)
{
//all elements are different
}
else
{
}
答案 5 :(得分:1)
由于您一次只比较两个值,因此您将拥有(n-1)!比较。
你应该考虑Ic。的回答。他将j的值偏移j为+1,以避免冗余比较。这就是它的简洁和高效。
但是,如果你必须写出比较:
if (a == b || a == c || a == d || a == e)
return false;
if (b == c || b == d || b == e)
return false;
//etc.
答案 6 :(得分:0)
清洁度可能存在争议,但如果你对它们进行排序,那么(根据需要)比较你所在的每个相邻对(n lg n)而不是(n ^ 2)。