Простой способ сравнить значения более 3 переменных? - PullRequest
4 голосов
/ 04 марта 2011

Я хочу проверить, имеют ли эти переменные одинаковые значения.

ПРИМЕР:

int a = 5;
int b = 5;
int c = 5;
int d = 5;
int e = 5;
. . .
int k = 5;

if(a==b && b==c && c==d && d==e && .... && j==k)  
{
   //this is Complex way and not well understandable.
}

Есть ли простой способ сравнить все одинаковые?
Как в примере ниже

if(a==b==c==d==e.....j==k)
{
    //Understandable but not work 
}

Ответы [ 11 ]

9 голосов
/ 04 марта 2011

как насчет этого:

if (Array.TrueForAll<int>(new int[] {a, b, c, d, e, f, g, h, i, j, k },
        val => (a == val))) {
    // do something
}
4 голосов
/ 04 марта 2011

Имеет ли такое количество переменных смысл в перемещении их в массив?

Затем вы можете проверить, равны ли они все, используя выражения Linq, такие как myarray.Distinct().Count() == 1; или, возможно, myarray.All(r => r == 5);

4 голосов
/ 04 марта 2011

Вы можете создать метод var args, чтобы сделать это:

bool intsEqual (params int[] ints) { 
   for (int i = 0; i < ints.Length - 1; i++) {
       if (ints[i] != ints[i+1]) {
          return False;
       }
   }
   return True;
}

Затем просто вызовите его со всеми вашими целыми числами в качестве параметров:

if (intsEqual(a, b, c, d, e, f, g, h, i, j, k)) {
    doSomeStuff();
}
2 голосов
/ 27 февраля 2013

Я согласен, что самый простой способ - поместить их все в список, а затем использовать следующее для сравнения.По сути, это циклическое прохождение и сравнение с первым значением, но это немного чище.

var match = counts.All(x => x == counts[0])
2 голосов
/ 04 марта 2011

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

Вот ответ на сайте, который касается этого, который можетпомочь с этим: Стандартное отклонение общего списка?

Интересная проблема.Удачи с этим.

1 голос
/ 05 июля 2013

Я знаю, что это старый вопрос, с которым я столкнулся, но мне было интересно, что не так с:

if (a == (b & c & d & e & f & g & h & i & j & k))
{

}
1 голос
/ 04 марта 2011

Вы можете написать вспомогательный метод следующим образом:

public static bool AllEqual<T> (params T[] values) where T : IEquatable<T>
{
    if (values.Length < 2) return true;

    for (int i = 1; i < values.Length; i++)
        if (!values[i].Equals (values[0])) return false;

    return true;    
}

В некоторых случаях это будет слегка отличаться от оператора ==:

AllEqual (double.NaN, double.NaN).Dump();    // True
(double.NaN == double.NaN).Dump();           // False
1 голос
/ 04 марта 2011

Как насчет

int common = a;
if (a==common && b==common  && c==common  && d==common  && .... && k==common)
0 голосов
/ 04 марта 2011

Вы можете использовать вспомогательную функцию с переменным аргументом, чтобы выполнить сравнение довольно легко.

static bool CompareLongList(params int[] args)
    {
        if (args.Length > 1)
        {
            int value = args[0];

            for (int i = 1; i < args.Length; ++i)
            {
                if (value != args[i])
                    return false;
            }
        }

        return true;
    }

Тогда вы просто использовали бы следующую функцию:

if(CompareLongList(a,b,c,d,e,f,j,h,i,j,k))
{
   // True Code
}
0 голосов
/ 04 марта 2011

Вы можете рассмотреть возможность помещения значений в массив и использования цикла for ().Это на самом деле не проще, но может помочь, если число значений изменилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...