0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#の繰り返し処理についてのアウトプット

Posted at

C#の繰り返し処理について学んだことをアウトプットしていきます。

動作の確認は.NET9で行っています。

while文

条件に一致している間、処理を繰り返します。
一致しない場合は処理を行いません。

そのため、最初の判定で不一致であった場合、処理回数は0になります。

C#
var names = new[] { "紫咲シオン", "宝鐘マリン", "雪花ラミィ", "大神ミオ", "戌神ころね" };

var index = 0;
Console.Write("処理1:");
while (index < names.Length)
{
    Console.Write($"{names[index++]}, ");
}

Console.WriteLine();

var index2 = 0;
Console.Write("処理2:");
while (index2 != 0)
{
    Console.Write($"{names[index2++]}, ");
}

// 処理1:紫咲シオン, 宝鐘マリン, 雪花ラミィ, 大神ミオ, 戌神ころね,
// 処理2:

do文

do文はwhile文と似ていますが、処理の最後に判定を行うため、少なくとも処理が1回は実行されます。

C#
var names2 = new[] { "紫咲シオン", "宝鐘マリン", "雪花ラミィ", "大神ミオ", "戌神ころね" };

var index3 = 0;
Console.Write("処理1:");
do
{
    Console.Write($"{names2[index3++]}, ");
}
while (index3 < names.Length);

Console.WriteLine();

var index4 = 0;
Console.Write("処理2:");
do
{
    Console.Write($"{names2[index4++]}, ");
}
while(index4 == 0);

// 処理1:紫咲シオン, 宝鐘マリン, 雪花ラミィ, 大神ミオ, 戌神ころね,
// 処理2:紫咲シオン,

for文

for文は3つのセクションに分かれており、それらを設定することでwhiledo文よりも細かな繰り返し処理が行えます。

セクションは以下の通りです。

  • 初期処理
  • 繰り返し条件
  • 後処理

初期処理

初期処理は処理の先頭で一度だけ実行されます。
主に繰り返しカウンターの生成などに利用されます。

繰り返し条件

この条件に一致する間、繰り返し処理を行います。

後処理

繰り返し処理の最後に実行されます。
主に繰り返しカウンターの増減に利用されます。

後処理は後述のcontinueでは処理をしますが、breakで処理をしません。

記述方法

C#
for (初期処理; 繰り返し条件; 後処理)
{
    処理;
}
C#
var names3 = new[] { "紫咲シオン", "宝鐘マリン", "雪花ラミィ", "大神ミオ", "戌神ころね" };

for (var i = 0; i < names3.Length; i++)
{
    Console.Write($"{names3[i]}, ");
}

// 紫咲シオン, 宝鐘マリン, 雪花ラミィ, 大神ミオ, 戌神ころね,

あまり機会はないと思いますが、ブロックを省略することも可能です。
その際は末尾に;が必要です。

C#
var names4 = new[] { "紫咲シオン", "宝鐘マリン", "雪花ラミィ", "大神ミオ", "戌神ころね" };

for (var i = 0; i < names3.Length; Console.Write($"{names4[i++]}, "));

// 紫咲シオン, 宝鐘マリン, 雪花ラミィ, 大神ミオ, 戌神ころね,

更に機会は少ないと思いますが、後処理は,区切りで複数指定が可能です。

C$
var names5 = new[] { "紫咲シオン", "宝鐘マリン", "雪花ラミィ", "大神ミオ", "戌神ころね", };
var names6 = new[] { "沙花叉クロヱ", "兎田ぺこら", "桃鈴ねね", "白上フブキ", "猫又おかゆ", };

for (int i = 0, j = 0; i < names5.Length; i++, j++, Console.WriteLine())
{
    Console.Write($"{names5[i]} - ");
    Console.Write($"{names6[j]}");
}

// 紫咲シオン - 沙花叉クロヱ
// 宝鐘マリン - 兎田ぺこら
// 雪花ラミィ - 桃鈴ねね
// 大神ミオ - 白上フブキ
// 戌神ころね - 猫又おかゆ

各セクションは省略が可能で、例えば条件を省略すると無限ループします。

C#
var names7 = new[] { "紫咲シオン", "宝鐘マリン", "雪花ラミィ", "大神ミオ", "戌神ころね", };

for (int i = 0; ; i++)
{
    if (i >= names7.Length)
    {
        break;
    }

    Console.Write($"{names7[i]}, ");
}

// 紫咲シオン, 宝鐘マリン, 雪花ラミィ, 大神ミオ, 戌神ころね,

foreach

System.Collections.IEnumerableまたはSystem.Collections.Generic.IEnumerable<T>インターフェイスを実装している型(配列やListなど)のデータを順番に取得していき、最後のデータになるまで繰り返し処理をします。

記述方法

C#
foreach (データ型 取得したデータを入れる変数 in 対象となるデータ)
{
    処理
}
C#
var names8 = new[] { "紫咲シオン", "宝鐘マリン", "雪花ラミィ", "大神ミオ", "戌神ころね", };

Console.Write("処理1:");
foreach (var name in names8)
{
    Console.Write($"{name}, ");
}

Console.WriteLine();

var names9 = new List<string> 
{ 
    "沙花叉クロヱ", "兎田ぺこら", "桃鈴ねね", "白上フブキ", "猫又おかゆ", 
};

Console.Write("処理2:");
foreach (var name in names9)
{
    Console.Write($"{name}, ");
}

// 処理1:紫咲シオン, 宝鐘マリン, 雪花ラミィ, 大神ミオ, 戌神ころね,
// 処理2:沙花叉クロヱ, 兎田ぺこら, 桃鈴ねね, 白上フブキ, 猫又おかゆ,

また、List型にはForEachという関数も用意されており、こちらでも同様の繰り返し処理が行えます。
どちらがスマートな書き方なのかはわかりませんが、個人的には関数を使用する方が好きです。

C#
var names10 = new List<string> 
{ 
    "沙花叉クロヱ", "兎田ぺこら", "桃鈴ねね", "白上フブキ", "猫又おかゆ", 
};

names10.ForEach(name =>
{
    Console.Write($"{name}, ");
});

// 沙花叉クロヱ, 兎田ぺこら, 桃鈴ねね, 白上フブキ, 猫又おかゆ,

Dictionary型でも処理が可能です。
データには変数.key変数.valueでアクセスできます。

C#
var members = new Dictionary<string, string>
{
    { "紫咲シオン", "塩っ子" },
    { "宝鐘マリン", "宝鐘の一味" },
    { "雪花ラミィ", "雪民" },
};

foreach (var member in members)
{
    Console.WriteLine($"{member.Key}のファンネームは{member.Value}です。");
}

// 紫咲シオンのファンネームは塩っ子です。
// 宝鐘マリンのファンネームは宝鐘の一味です。
// 雪花ラミィのファンネームは雪民です。

continue

繰り返し処理を中断し、処理の先頭に戻ります。
この時、for文では後処理を行います。

C#
var points = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int i = 0; i < points.Length
   ; Console.WriteLine($"処理した数値は{points[i]}です。\n", i++))
{
    if (points[i] % 2 != 0)
    {
        Console.WriteLine("これは奇数です。");
        continue;
    }
    Console.WriteLine("これは偶数です。");
}

// これは奇数です。
// 処理した数値は1です。
//
// これは偶数です。
// 処理した数値は2です。
//
// これは奇数です。
// 処理した数値は3です。
// 
// これは偶数です。
// 処理した数値は4です。
// 
// これは奇数です。
// 処理した数値は5です。
// 
// これは偶数です。
// 処理した数値は6です。
// 
// これは奇数です。
// 処理した数値は7です。
// 
// これは偶数です。
// 処理した数値は8です。
// 
// これは奇数です。
// 処理した数値は9です。
// 
// これは偶数です。
// 処理した数値は10です。

break

繰り返し処理を中断し、処理を抜けます。
この時、for文では後処理を行いません。

C#
var points2 = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int i = 0; i < points2.Length
     ; Console.WriteLine($"処理した数値は{points2[i]}です。\n", i++))
{
    if (points2[i] % 2 != 0)
    {
        Console.WriteLine("これは奇数です。");
        if (points2[i] == 5)
        {
            break;
        }
        continue;
    }
    Console.WriteLine("これは偶数です。");
}

// これは奇数です。
// 処理した数値は1です。
// 
// これは偶数です。
// 処理した数値は2です。
// 
// これは奇数です。
// 処理した数値は3です。
// 
// これは偶数です。
// 処理した数値は4です。
// 
// これは奇数です。
0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?