for (int i = 0; i < X; i++)
myitem = (checkedDB) ? dirtyItem : cleanItem;
同じステートメントでcheckedDBを反転する方法があるかどうかを知りたかったのです。つまり、次の反復checkedDBはその値の反対であり、XORのようです。
どうですか:
for (int i = 0; i < X; i++)
myitem = !(checkedDB = !checkedDB) ? dirtyItem : cleanItem;
一見しただけでは読みにくい/理解できないかもしれませんが、1 つのステートメントで必要なことを実行できます。
最善の答え、IMOは、自尊心があればそうではありません. 結果は見苦しく混乱を招き、何の利益も得られません。よりクリーンで理解しやすい 2 つの異なるソリューションを次に示します。
for (int i = 0; i < X; i++)
{
myitem = checkedDB ? dirtyItem : cleanItem;
checkedDB = !checkedDB;
}
次のバージョンは、追加の変数を必要とせず、1 行の目標を達成します。
for (int i = 0; i < X; i++)
{
myitem = i%2 == 0 ? dirtyItem : cleanItem;
}
ブール値を切り替える 1 つの方法は次のbool ^= true
とおり です。
for (int i = 0; i < X; i++)
{
myitem = (checkedDB ^= true) ? cleanItem : dirtyItem;
}
それらのいずれかが選択される前に切り替えたので、交換cleanItem
しました。dirtyItem
checkedDB
checkedDb ^= true
overを使用する利点はcheckedDB = !checkedDB
、変更するつもりだったことが明らかであり、checkedDB
誤って==
比較をタイプミスしていないことです。
言語を指定していないため、あなたの言語が三項演算子の条件部分で代入を許可するかどうかはわかりません。