web-dev-qa-db-ja.com

foreachループの繰り返しをスキップするにはどうすればいいですか?

Perlでは、next;コマンドを使ってforeach(または任意のループ)反復をスキップできます。

反復をスキップしてC#の次のループにジャンプする方法はありますか?

 foreach (int number in numbers)
 {
     if (number < 0)
     {
         // What goes here to skip over the loop?
     }

     // otherwise process number
 }
288
Brian

あなたが欲しい:

foreach (int number in numbers) //   <--- go back to here --------+
{                               //                                |
    if (number < 0)             //                                |
    {                           //                                |
        continue;   // Skip the remainder of this iteration. -----+
    }

    // do work
}

これは continueキーワード についての詳細です。


更新:コメント内のBrianのフォローアップの質問に答えて:

Forループをネストしていて、拡張ループの1つの反復をスキップしたいとしたらどうするのか、さらに明確にしてもらえますか。

for (int[] numbers in numberarrays) {
  for (int number in numbers) { // What to do if I want to
                                // jump the (numbers/numberarrays)?
  }
}

continueは常に最も近いスコープに適用されるので、それを使って一番外側のループから抜け出すことはできません。このような状況が発生した場合は、内側のループのbreak、外側のループのcontinueのように、必要に応じてもっと複雑なことをする必要があります。 breakキーワード に関するドキュメントはこちらをご覧ください。 break C#キーワードは、Perlのlastキーワードと似ています。

また、Dustinの提案を参考にして、事前に処理したくない値を除外してください。

foreach (var basket in baskets.Where(b => b.IsOpen())) {
  foreach (var fruit in basket.Where(f => f.IsTasty())) {
    cuteAnimal.Eat(fruit); // Om nom nom. You don't need to break/continue
                           // since all the fruits that reach this point are
                           // in available baskets and tasty.
  }
}
596
John Feminella

もう1つの方法は、ループが実行される前にLINQを使用してフィルタリングすることです。

foreach ( int number in numbers.Where(n => n >= 0) )
{
    // process number
}
52
Dustin Campbell

Ifテストを裏返すこともできます。


foreach ( int number in numbers )
{
     if ( number >= 0 )
     {
        //process number
     }
 }
24
crashmstr
foreach ( int number in numbers )
{
    if ( number < 0 )
    {
        continue;
    }

    //otherwise process number
}
17
Tamas Czinege

Linqを使ったもう一つのアプローチは:

foreach ( int number in numbers.Skip(1))
{   
    // process number  
}

あなたがアイテムの数の最初をスキップしたい場合。

スキップする条件を指定したい場合は.SkipWhereを使用してください。

16

continue ステートメントを使用できます。

例えば:

foreach(int number in numbers)
{
    if(number < 0)
    {
        continue;
    }
}
13
Kev

Continueステートメントを使用してください。

foreach(object o in mycollection) {
     if( number < 0 ) {
         continue;
     }
  }
7
drewh

これを行う最も簡単な方法は次のとおりです。

//Skip First Iteration

foreach ( int number in numbers.Skip(1))

//Skip any other like 5th iteration

foreach ( int number in numbers.Skip(5))
0
Kashif