我有五个int变量:
int firstSequence;
int secondSequence;
int thirdSequence;
int fourthSequence;
int fifthSequence;
这些变量中的每一个都可以具有1-5的值。如果每个变量都具有唯一值,如何以最有效的方式检查?我的意思是只有一个可以有值= 1等。
private bool IsOrderCorrect()
{
if(firstSequence != secondSequence && ...)
}
答案 0 :(得分:13)
只需将它们放入数组中,然后使用Distinct
:
new [] {
firstSequence,
secondSequence,
thirdSequence,
fourthSequence,
fifthSequence
}.Distinct().Count() == 5;
答案 1 :(得分:2)
你可以尝试
( (1 << firstSequence)
| (1 << secondSequence)
| (1 << thirdSequence)
| (1 << fourthSequence)
| (1 << fifthSequence))
== (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5);
答案 2 :(得分:1)
你去吧
List<int> uniqueCheck = new List<int>() { firstSequence, secondSequence, thirdSequence, fourthSequence, fifthSequence };
if(uniqueCheck.Distinct().Count() == uniqueCheck.Count())
{
//they are unique
}
答案 3 :(得分:0)
我认为这不是最有效的方式。
最有效的方法是将它们相加并确保总和等于15。
在我的机器上测试1000000次导致.Distinct()。Count()== 5方法占用244.77毫秒。
做同样的事情,但使用.Sum()== 15需要54.92,所以sum方法更有效。
话虽如此,使用Distinct()。Count(),会推广到更多情况,但是op要求最有效的方法。
编辑:
抱歉,当我输入原件时我很急,所以它有缺陷。我的一般方法保持不变,但不是对数字求和,而是应该求平方,我认为它应该等于55,如果数字是分散的,则应该总和为55.
使用平方和进行测试需要139毫秒,这仍然比.Distinct()更快.Count()== 5
所以我的答案应该更新为.Select(x =&gt; x * x).Sum()== 55
答案 4 :(得分:-3)
如果他们在阵列中,那将非常容易
int[] numbers = new int[] {1,2,3,4,5};
for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j!= i && j < numbers.Length; j++)
{
if (numbers[i] == numbers[j]) {
// you know what to do
}
}
}