2011-03-04 28 views
4

我想检查这些变量是否有相同的值。比较超过3个变量值的简单方法?

例:

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 
} 
+2

如果(!A + B + C ... + K = 55)... :) – glomad 2011-03-04 01:57:30

+4

哦,noes! a = 55,b = 0,...,k = 0 :) – mellamokb 2011-03-04 01:58:03

+0

@ithcy,5只是一个例子,它可能是2或3或其他值取决于用户。 – 2011-03-04 01:58:42

回答

8

怎么是这样的:

if (Array.TrueForAll<int>(new int[] {a, b, c, d, e, f, g, h, i, j, k }, 
     val => (a == val))) { 
    // do something 
} 
0

它不工作,因为一== b将不能相比的整数,c的布尔下方。你所拥有的似乎是最好的方法。

+0

我知道,只是举一个例子来解释我需要 – 2011-03-04 02:01:50

2

只是一个想法,但如果你可以计算整个列表的标准偏差,并且它等于零,你会得到你的答案。

下面是解决这一点,可以提供帮助的网站上的一个答案:Standard deviation of generic list?

有趣的问题。祝你好运。

+1

Yay,没有什么像增加低效 – mellamokb 2011-03-04 02:04:40

4

您可以创建一个变参的方法来做到这一点:

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(); 
} 
+0

是不是应该是ints.Length和我 leiz 2011-03-04 02:05:26

+1

是的,可能我几乎从来没有使用C# – 2011-03-04 02:06:21

+0

@Kaleb:简单的rep点是一个诱人的零食,呃? – mellamokb 2011-03-04 02:06:43

0

您可能会考虑将值放入数组中并使用for()循环。这并不简单,但如果值的数量发生了变化,它可能会有所帮助。

0

如何

int common = a; 
if (a==common && b==common && c==common && d==common && .... && k==common) 
1

你可以写一个辅助方法是这样的:

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 
+0

谢谢 - 更正 – 2011-03-04 02:13:18

4

有了这么多变量,将它们移动到数组中是否合理?

然后,您可以测试,看看他们都是平等的使用LINQ表达式像myarray.Distinct().Count() == 1;或许myarray.All(r => r == 5);

0

你可以使用一个变量参数辅助函数来很容易地进行比较。

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

我同意,最简单的方法是把它们全部放入一个列表,然后使用以下方法来进行比较。这本质上是循环和比较的第一个值,但这是一个更清洁。

var match = counts.All(x => x == counts[0]) 
1

我知道这是我碰到了一个老问题,但我不知道这有什么错:

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

} 
+0

如果您确定a是否等于所有这些字母拼凑在一起的值,那么没有问题。 – PhoenixLament 2013-08-10 04:53:01