シーケンスを増分しないようにforループをコーディングする方法はありますか?


10

私はこのループを持っています:

  for (int i = 1; i < 10; i++)

しかし、代わりに、1、2、4、5、7のiだけを使用したいと考えています。

配列のようなものでこれを行う方法はありますか?


1
必要な数の配列を作成し、foreachを使用する
PaulF

2
詳細を教えて、関連するソリューションの提供を支援できますか?どのくらいの頻度で数字をスキップする予定ですか?いくつの数字をスキップする予定ですか?スキップする数値をどのようにして知るのですか?そもそもなぜ数字を飛ばしているのですか?何をどのようにハードコーディングしていますか?
Corentin Pane

重複を見つけることを最初に思ったほど簡単ではありません
Mong Zhu

回答:


13

あなたはこのようにあなたが望む数を与えるために配列を使うことができます

int[] loop = new int[] {1,2,4,5,7};
foreach(int i in loop)
    Console.WriteLine(i);

または、私の意見では値のリストが大きくなったときにそれほどクリーンではないインラインで実行します

foreach(int i in new int[] {1,2,4,5,7})
    Console.WriteLine(i);

1
2番目のものは私にはよりきれいです-配列はループ中のみスコープ内にあります。また、intコンパイラーが内容からそれを決定するため、それを本当に「クリーン」にするために、宣言を削除することができます。
Rufus L


4

基本的にここでの答えは正しいです。ループではforなく明示的にaを要求したからですforeach

int[] loop = new int[] { 1, 2, 4, 5, 7 };
for (int i = 0; i< loop.Length; i++)
{
    Console.WriteLine(loop[i]);
}

https://dotnetfiddle.net/c5yjPe


0

特にforループが必要な場合は、次のようにします。

var list = new List<int>() { 1, 2, 4, 5, 7 };
        for (int i = 0; i < list.Count; i++) // Loop through List with for
        {
            Console.WriteLine(list[i]);
        }

0

一般的なケースの正しい答えforeachは、他の答えに示すように、またはインデックス付きルックアップを使用することですが、完全を期すためです。

条件文を含め、式内で任意のステートメントを使用できますfor。これを念頭に置いて、必要なセットに対して条件付きインクリメントまたは完全な条件付き(ステートマシン?)を構築することは簡単です。

for (int i = 1; i <= 7; i += (i == 5 || i == 2) ? 2 : 1)
{
    Console.Write(i);
}
// Output: 12457

for (int i = 1; i > 0; i = i switch {1=>2, 2=>4, 4=>5, 5=>7, 7=>-1})
{
    Console.Write(i);
}
// Output: 12457

あるいは、自己索引付けルックアップのような本当にばかげたものでも:

for (int i = 1; i > 0; i = new []{0,2,4,0,5,7,0,-1}[i])
{
    Console.Write(i);
}
// Output: 12457
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.