3
for (int i = 0; i < X; i++)
   myitem = (checkedDB) ? dirtyItem : cleanItem;

我想知道是否有一种方法可以在同一语句中翻转checkedDB,即下一次迭代checkedDB 与它的值相反,就像XORing 一样。

4

3 回答 3

6

关于什么:

for (int i = 0; i < X; i++)
    myitem = !(checkedDB = !checkedDB) ? dirtyItem : cleanItem;

乍一看,这可能不是真正可读/可理解的,但它可以在一个语句中完成您想要的。

于 2010-05-01T00:11:31.627 回答
3

最好的答案,国际海事组织,是:如果你有任何自尊,就不会。结果将是丑陋和令人困惑的,并且没有真正的收益。这里有两种不同的解决方案,它们更简洁,因此更容易理解。

for (int i = 0; i < X; i++)
{
    myitem = checkedDB ? dirtyItem : cleanItem;
    checkedDB = !checkedDB;
}

以下版本甚至不需要额外的变量并实现您的单行目标:

for (int i = 0; i < X; i++)
{
    myitem = i%2 == 0 ? dirtyItem : cleanItem;
}
于 2010-05-01T00:30:06.463 回答
0

切换布尔值的一种方法是bool ^= true

for (int i = 0; i < X; i++)
{
   myitem = (checkedDB ^= true) ? cleanItem : dirtyItem;
}

我交换了cleanItemdirtyItem因为您checkedDB在选择其中一个之前切换。

使用checkedDb ^= trueover的好处checkedDB = !checkedDB是,很明显您打算修改checkedDB并且没有意外打错==比较。

由于您尚未指定语言,因此我无法确定您的语言是否允许在三元运算符的条件部分进行赋值。

于 2010-05-01T00:20:33.327 回答