【问题标题】:Turn this if-then logic into a boolean expression?把这个 if-then 逻辑变成一个布尔表达式?
【发布时间】:2011-10-03 04:53:47
【问题描述】:

在使这段代码更简洁(最好是单个布尔表达式)方面我有点脑子放屁

这是我的代码:

                    if (d.Unemployed)
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = true;
                        }
                        else
                        {
                            tmp.Unemployed = false;
                        }
                    }
                    else
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = false;
                        }
                        else
                        {
                            tmp.Unemployed = true;
                        }
                    }

基本上,如果typed 没有失业,那么tmp 应该设置为未失业。

【问题讨论】:

  • 你的意思是“typed不是失业者,但不是两者都”?
  • @svick:是的,代码中的 if-else 逻辑证实了这一点。
  • @Justin,这就是我问的原因。你的代码说的不是你的文字,或者至少不清楚它们的意思是一样的。

标签: algorithm binary bit-manipulation boolean-logic


【解决方案1】:

怎么样:

tmp.Unemployed = type.Unemployed == d.Unemployed;

【讨论】:

  • 啊,现在想起来很明显了。我猜只是需要另一双眼睛
【解决方案2】:

如果我们按照代码构造一个真值表,我们得到

d  | type | tmp
---+------+----
1  |   1  |  1
---+------+----
1  |   0  |  0
----+-----+----
0  |   1  |  0
----+-----+----
0  |   0  |  1

以上等价于xor操作的否定。

tmp = not (d xor type)

如果语言没有xor 运算符,我们可以在布尔值上使用!=

tmp = ! (d != type);
// or
tmp = d == type;

【讨论】:

    【解决方案3】:

    考虑一下这给您造成了多少“大脑放屁”,我会考虑使用一个命名良好的变量,以避免将来再次经历这种心理过程。像这样的:

    isTmpUnemployed = (type.Unemployed == d.Unemployed);
    tmp.Unemployed = isTmpUnemployed;
    

    【讨论】:

      【解决方案4】:

      上面的代码表示“都失业或都没有失业”。因此,不是(A xor B):

       tmp.Unemployed = ! ( D.Unemployed ^ type.Unemployed)
      

      【讨论】:

        【解决方案5】:
        tmp.Unemployed = d.Unemployed || type.Unemployed ? !tmp.Unemployed : null;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-21
          • 2020-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多