检查几个布尔值是否具有相同的值

时间:2012-06-29 14:14:54

标签: c# boolean compare

我有三个布尔变量。我需要检查这三个都是真的还是全部都是假的。

我可以用'虚拟'的方式做到这一点:

bool areSame = false; 
if(a && b && c)    
    areSame = true; 
else if (!a && !b && !c)
    areSame = true;

我想知道是否还有其他更优雅的解决方案。

7 个答案:

答案 0 :(得分:6)

当然,你只是在这里比较三个,但 未来 呢?您可能需要在路上的某个地方比较十个布尔值。

    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(false.AllEqual(false, false)); 
                Console.WriteLine(true.AllEqual(false, false));
                Console.WriteLine(true.AllEqual(true, false));

                bool a = true;
                bool b = false;
                bool c = true;
                Console.WriteLine(a.AllEqual(b, c));
                b = true;
                Console.WriteLine(a.AllEqual(b, c));
                Console.ReadLine();
            } 
        }

        static class Extensions
    {
        static public  bool AllEqual(this bool firstValue, params bool[] bools)
        {
            return bools.All(thisBool => thisBool == firstValue);
        }
    }

答案 1 :(得分:5)

你也可以在布尔值上使用相等运算符:

bool areSame = (a == b) && (a == c);

答案 2 :(得分:4)

如何使用它?

areSame = (a == b && b == c);

答案 3 :(得分:1)

怎么样:

bool areSame = (a && b && c) || (!a && !b && !c) ? true : false;

答案 4 :(得分:0)

这种方法怎么样?它将允许您传入尽可能多的书籍,看看是否满足最小数量的真实。

public static bool AreMinNumberOfTruesMet(int minNumOftrue, params bool[] bools)
{
    var totalTrue = bools.Count(boolean => boolean == true);

    return totalTrue >= minNumOftrue;
}

答案 5 :(得分:0)

//all same
bool allSame = a == b == c == d;

//all false
bool allFalse = a == b == c == d == false;

答案 6 :(得分:0)

或一行:

import pandas as pd
import numpy as np

d = {'Car': ['BMW', 'Volvo'], 'Model': ['Model1', 'V1']}
df = pd.DataFrame(data=d)
df['1.1'] = [2,0]
df['2.1'] = [5,0]
df['3.1'] = [2,10]
df['4.1'] = [0,3]
values = df.iloc[:,2:] 
df['sum'] = values.apply(np.sum, axis=1)
df['count'] = values.astype(bool).sum(axis=1)

print(df.head)
     Car   Model  1.1  2.1  3.1  4.1   sum   count
0    BMW  Model1    2    5    2    0    9      3
1  Volvo      V1    0    0   10    3   13      2