2014-09-02 3 views
0

У меня есть пять Int переменных:разные значения для каждой переменной Int

int firstSequence; 
int secondSequence; 
int thirdSequence; 
int fourthSequence; 
int fifthSequence; 

Каждый из этих переменных может иметь значение от 1-5. Как проверить наиболее эффективный способ, если каждая из этих переменных имеет уникальное значение? Я имею в виду только один может иметь значение = 1 и т.д.

private bool IsOrderCorrect() 
    { 
     if(firstSequence != secondSequence && ...) 
    } 
+4

Подсказка: Ваше решение будет легче, если вы использовали массив вместо 5 переменных. –

ответ

13

Просто поместите их в массив затем использовать Distinct:

new [] { 
     firstSequence, 
     secondSequence, 
     thirdSequence, 
     fourthSequence, 
     fifthSequence 
     }.Distinct().Count() == 5; 
+0

dang nabit. глупые проблемы с переполнением стека. – DidIReallyWriteThat

-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 
       } 
      } 
     } 
1

Держи

List<int> uniqueCheck = new List<int>() { firstSequence, secondSequence, thirdSequence, fourthSequence, fifthSequence }; 

if(uniqueCheck.Distinct().Count() == uniqueCheck.Count()) 
{ 
    //they are unique 
} 
0

Я не думаю, что это самый эффективный способ.

Наиболее эффективным способом было бы подвести их и убедиться, что сумма равна 15.

Тестирование это на моей машине через 1000000 раз приводит к .distinct(). Count() == 5 метод, принимающий 244.77 миллисекунды.

Выполнение того же, но использование .Sum() == 15 принимает 54.92, поэтому метод sum более эффективен.

Сказав это, используя Distinct(). Count(), обобщит на большее количество случаев, однако оп попросил наиболее эффективный способ.

EDIT:

К сожалению, я мчался, когда я напечатал оригинал так, что было испорчено. Мой общий метод остается тем же, но вместо суммирования чисел вы должны суммировать квадраты, которые, как я полагаю, должны равняться 55 и должны суммироваться только до 55, если числа отличаются.

Тестирование с суммой квадратов занимает 139 миллисекунд, который является еще быстрее, чем .distinct(). Count (== 5

Так что мой ответ должен быть обновлен до .select (х => х * х)) .sum() == 55

+0

Если значения равны 1, 2, 2, 5, 5, они также суммируются до 15. –

+1

, попробуйте ответить Фальк Хюффнер выше, занимает 6 миллисекунд, чтобы вычислить 1000000 раз, что быстрее, чем .Distinct(). Count() и .Sum() – DanL

2

вы можете попробовать

( (1 << firstSequence) 
| (1 << secondSequence) 
| (1 << thirdSequence) 
| (1 << fourthSequence) 
| (1 << fifthSequence)) 
== (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5); 
Смежные вопросы