比较3个以上变量值的简单方法?

时间:2011-03-04 01:54:51

标签: c# comparison

我想检查这些变量是否具有相同的值。

示例:

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 
}

14 个答案:

答案 0 :(得分:9)

这样的事情怎么样:

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

答案 1 :(得分:4)

您可以创建一个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 :(得分:4)

有了这么多变量,将它们移动到数组中会有意义吗?

然后,您可以使用Linq表达式(例如myarray.Distinct().Count() == 1;myarray.All(r => r == 5);

来测试它们是否完全相同

答案 3 :(得分:2)

只是一个想法,但如果你能计算出整个清单的标准偏差,并且它等于零,你就会有答案。

以下是针对此问题的网站上的答案:Standard deviation of generic list?

有趣的问题。祝你好运。

答案 4 :(得分:2)

我同意最简单的方法是将它们全部放入列表中,然后使用以下内容进行比较。这实际上是循环并与第一个值进行比较,但这有点清晰。

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

答案 5 :(得分:1)

怎么样

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

答案 6 :(得分: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

答案 7 :(得分:1)

我知道这是我遇到的一个老问题,但我想知道出了什么问题:

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

}

答案 8 :(得分:0)

它不起作用,因为a == b计算为无法与整数c进行比较的布尔值。你所拥有的似乎是最好的方式。

答案 9 :(得分:0)

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

答案 10 :(得分: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
}

答案 11 :(得分:0)

比较数组中的相同元素:

same = len(uniq([1,2,3,4])) == 1

答案 12 :(得分:0)

使用 Linq 查询。 var bestInt = new List() { a,b,c,d,e,f}.Max();

答案 13 :(得分:0)

按位和是检查多个变量是否具有相同值的可能方法。 这种辅助方法当然也可以检查相等性,而不是使用“&”运算符。接受 params 变量数组的辅助方法在这里似乎是正确的方法。我们也可以调整此方法以接受泛型参数,但在 C#(和其他语言)中,只有少数数据类型支持布尔逻辑运算符。

使用高 Int32 值进行测试以检查其有效性:

void Main()
{
    int a = 1234567891;
    int b = 1234567891;
    int c = 1234567891; 
    int d = 1234567891;
    int e = 1234567891; 
    int f = 1234567891; 
    int g = 1234567891; 
    int h = 1234567891; 
    int i = 1234567891; 
    int j = 1234567891;
    int k = 1234567891; 
    bool areAllSameValue = IntUtils.AreAllVariablesSameValue(a,b,c,d,e,f,g,h,i,j,k);
    areAllSameValue.Dump(); //Linqpad method - dump this code into Linqpad to test
}

public class IntUtils
{
    public static bool AreAllVariablesSameValue(params int[] values)
    {
        if (values == null || !values.Any())
        {
            return false;
        }
        int bitWiseAndValue = values[0];
        foreach (var value in values)
        {
            bitWiseAndValue &= value;
        }
        return bitWiseAndValue == values[0];        
    }
}

如果其中一个值有不同的符号(负数),这也会指出。

相关问题