簡體   English   中英

如何執行循環以同時檢查C#的所有變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM