for (int i = 0; i < X; i++)
myitem = (checkedDB) ? dirtyItem : cleanItem;
我想知道是否有一种在同一语句中翻转checkedDB的方法,即下一次迭代checkedDB与它的值相反,所以就像XORing一样。
答案 0 :(得分:6)
怎么样:
for (int i = 0; i < X; i++)
myitem = !(checkedDB = !checkedDB) ? dirtyItem : cleanItem;
初看起来可能并不是真的可读/可理解,但它在一个声明中做了你想要的。
答案 1 :(得分:3)
最好的答案,IMO,是:如果你有任何自尊,那就不是了。结果将是丑陋和混乱,并没有真正的收获。以下是两种截然不同的解决方案,它们更清晰,更易于理解。
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;
}
答案 2 :(得分:0)
切换布尔值的一种方法是bool ^= true
:
for (int i = 0; i < X; i++)
{
myitem = (checkedDB ^= true) ? cleanItem : dirtyItem;
}
我交换了cleanItem
和dirtyItem
,因为您在选择其中一个之前切换checkedDB
。
使用checkedDb ^= true
优于checkedDB = !checkedDB
的好处是很明显,您打算修改checkedDB
并且不会意外地错误输入==
比较。
由于您尚未指定语言,我无法确定您的语言是否允许在三元运算符的条件部分进行赋值。