最近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クラスを使ったサンプルを紹介出来たらなと思います。
ちょっとした疑問からスタートしたモノであるが、意外とできる事を知れて嬉しく思う!!
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント