![](/img/trans.png)
[英]C#: How to check if all the elements in an array of boolean variables are of the same value (All true or All false)?
[英]How to do a loop to check all the variables at the same time for C#?
我想循環除blueBallPosition [0]和greenBallPosition [0]之外的所有blueBallPosition [i]和greenBallPosition [i]。 另外,如果除[0]以外的所有變量都大於360,我想執行if else語句。而[0]小於360。我試圖做一個循環。 但是,如果blueBallPosition [1]> 360和greenBallPosition [1]> 360,則已經將暫停設置為true。 我想遍歷所有變量以確保它們> 360,然后將其暫停設置為true。
for (int i = 1; i < levelBall; i++)
{
if ((blueBallPosition[0] < 360) &&
(greenBallPosition[0] < 360) &&
(blueBallPosition[i] > 360) &&
(greenBallPosition[i] > 360))
{
pause = true;
}
}
供您參考,levelBall設置為4。
我已經解決了 我只需要添加一個計數器。
for (int i = 1; i < levelBall; i++)
{
if ((blueBallPosition[0] < 360) && (greenBallPosition[0] < 360) && (blueBallPosition[i] > 360) && (greenBallPosition[i] > 360))
{
count++;
}
}
if (count == (levelBall))
{
pause = true;
}
else
{
count = 0;
}
因此,您只想在所有球(除0以外)均大於360時暫停嗎?
bool pause = false;
// Check ball[0] outside the loop for performance.
if (blueBallPosition[0] < 360 && greenBallPosition[0] < 360)
{
pause = true;
for (int i = 1; i < levelBall; i++)
{
if (blueBallPosition[i] <= 360) || (greenBallPosition[i] <= 360))
{
pause = false;
// You have found a ball that doesn't match, so no need
// to keep checking.
break;
}
}
}
由於您要檢查所有變量是否都滿足該條件,因此如果不能滿足則不能將其設置為true,因此可以將其重寫為true開始,檢查其中一個變量是否不滿足,然后將其設置為false 。 如果之后仍然如此,則您知道所有變量都滿足條件。
pause = true;
for(...)
if(blue[0] >= 360) || green[0] >= 360 || blue[i] <= 360 || green[i] <= 360)
pause = false;
嘗試這個:
if (blueBallPosition[0] < 360 &&
greenBallPosition[0] < 360 &&
blueBallPosition.Skip(1).All(b => b > 360) &&
greenBallPosition.Skip(1).All(b => b > 360))
pause = true;
您可以嘗試使用linq使其更具可讀性:
if (blueBallPosition[0] < 360 && greenBallPosition[0] < 360)
{
var paulse = blueBallPosition.Select((b, idx) =>
new { Blue = b, Green = greenBallPosition[idx] })
.Skip(1).All(x => x.Blue > 360 && x.Green > 360);
}
pause = true;
for (int i = 1; i < levelBall; i++)
{
if ((blueBallPosition[0] >= 360) ||
(greenBallPosition[0] >= 360) ||
(blueBallPosition[i] <= 360) ||
(greenBallPosition[i] <= 360))
{
pause = false;
break;
}
}
首先,將檢查移到循環之外。 然后假設所有檢查都通過了,如果結果是假的,則撤消該假設:
if ((blueBallPosition[0] < 360) &&
(greenBallPosition[0] < 360))
{
pause = true;
for (int i = 1; i < levelBall; i++)
{
if((blueBallPosition[i] <= 360) ||
(greenBallPosition[i] <= 360))
{
pause = false;
}
}
}
非常簡短的代碼,例如:
var pause = false;
if (blueBallPosition[0] < 360 && greenBallPosition[0] < 360)
{
pause = blueBallPosition.Any(b => b <= 360) || greenBallPosition.Any(b => b < 360);
}
不要忘記在命名空間中使用。 使用System.Linq;
Alex和Rex在代碼上的壞處是,您正在使用ALL = all,如果您使用Any修改解決方案,則意味着循環所有元素會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.