【C#】Python風の繰り返し文

スポンサーリンク

最近LINQの勉強してたら、行き詰ってきたので、ちょっと息抜きの記事を書きたいと思う。
内容はタイトルである通りで『Pythonみたいな繰り返し文』を作りたいと思います。

繰り返し文ではよく【指定の回数(N回)繰り返す】という事をします。
そこでC#とPythonで比較した時にPythonみたいな書き方が出来ないのかという疑問から作ってみた。

今回使うのは、「EnumerableクラスのRangeメソッド」です。
分かりやすく説明する為に前置きが長くなってしまいますが、結論だけ知りたい人はココをクリック。

繰り返し文(for文)

C#/Pythonで10回繰り返すサンプルを作ってみる

C#の場合

int N = 10;
for(int n = 0; n < N; n++)
{
    Console.WriteLine(n);
}

Pythonの場合

N = 10
for n in range(0,N):
    print(n)

出力される結果

出力される結果は同じなので下記に記載する。
シンプルなコードなのでどうなるか分かっているかもしれませんが。。。

0
1
2
3
4
5
6
7
8
9

Pythonの繰り返し文って、C#のforeach??

繰り返し文を比較すると構文的には、Pythonの繰り返し文は、C#の【foreach】に近い気がする。
foreachで書いた場合、どうなるのか?

C#の場合(foreach)

int[] Ns = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foreach (int n in Ns)
{
    Console.WriteLine(n);
}

C#ではforeachを使う場合、配列やリストクラス等といったオブジェクトでないといけない。
その為、オブジェクトを事前に作成しておかないといけない。。。
この方法では100回繰り返したい時にえげつない事になってしまう。。。
※単純な繰り返しであるならfor文を使いますが。。。

EnumerableクラスのRangeメソッドを使う

ここで登場するのは『Enumerableクラス』である
このクラスの説明は下記URLを参考にしてください。
Enumerable クラス (System.Linq) | Microsoft Learn

今回使用するメソッドの『Rangeメソッド』の説明は、下記のように『指定した範囲内の整数のシーケンスを生成します』と書いてあります。

『シーケンスを生成??』よくわかりませんが、
簡単に説明すると
(第1引数)以上、(第2引数)未満の整数の配列的なオブジェクト】を作ってくれるんでしょう。

余談ですが、
なぜ『配列的なオブジェクト』と表現したのかというと、
戻り値のクラスは【IEnumerable<int>】
だからです。
ここは深く理解せずに[そうなんだ]程度に受け止めた方がいいと思います

C#の場合(foreach)※python風

int N = 10;
foreach (int n in Enumerable.Range(0, N))
{
    Console.WriteLine(n);
}

Pythonの繰り返し文っぽく書くことが出来ました!!
仮に1行ずつ丁寧に書きたい場合は下記のようになります。

int N = 10;
IEnumerable<int> Ns = Enumerable.Range(0, N);
foreach (int n in Ns)
{
    Console.WriteLine(n);
}

まとめ

今回は息抜きとして【C#でPythonみたいな繰り返し文の書き方】について記載してみました。
Enumerableクラスを使う事でpython風の書き方が可能でした。
しかし、for文で十分なので、わざわざpython風に書く必要もないでしょう。。。

LINQのNameSpaceの中にある為、LINQの構文が使用できます。
ちょっとこのEnumerableクラスを使ったサンプルを紹介出来たらなと思います。

ちょっとした疑問からスタートしたモノであるが、意外とできる事を知れて嬉しく思う!!

コメント

タイトルとURLをコピーしました