R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

クエリー式とイテレータ

http://blogs.wankuma.com/rti/archive/2008/02/06/121572.aspx
SelectMany

これの続きっちゃー続きなんですが、テーマはちょっと違うのでタイトルは別にしました。

以下のコードですが、「Enumerable.Range(0, 3)」が共通しているのでまとめたい衝動に駆られます。


var q =
  from x in Enumerable.Range(0, 3)
  from y in Enumerable.Range(0, 3)
  from z in Enumerable.Range(0, 3)
  select x * 100 + y * 10 + z;
foreach(var x in q) Console.WriteLine(x);


こんな感じです。
(ここで何が言いたいのかがわかる人は、その通りの展開になるので、もう見なくて良いです^^;)


var e = Enumerable.Range(0, 3);
var q =
  from x in e
  from y in e
  from z in e
  select x * 100 + y * 10 + z;
foreach(var x in q) Console.WriteLine(x);


e を共通して使う訳ですが、それぞれが独立してカウントしてくれるでしょうか?


0
1
2
10
11
12
20
21
22
100
101
102
110
111
112
120
121
122
200
201
202
210
211
212
220
221
222


動きましたね・・・

まぁ、以下のように書き換えてみれば別に何ら不思議は無い訳ですけど、クエリー式になると、ちょっと「おっ?!」みたいになりますw


public class HogeClass {
  static void Main() {
    var e = RTanakaIchiroEnumerable.Range(0, 3);
    var q =
      e.SelectMany(x =>
        e.SelectMany(y =>
          e.Select(z =>
            x * 100 + y * 10 + z
          )
        )
      ); // わかりやすいと思うので、今回はあえてこう書きます。
    foreach(var x in q) Console.WriteLine(x);
  }
}
public class RTanakaIchiroEnumerable {
  static public IEnumerable<int> Range(int start, int count) {
    // Console.WriteLine("素敵だし爽やかRさん");
    for(var i = start; i < start + count; ++i) yield return i;
  }
}


わからない人は、上記のコメントを外して「

Rさんが素敵で爽やか

」であることを認めてから実行してみて下さい。


イテレーターブロックの動きがわかりやすいと思います。

投稿日時 : 2008年2月12日 10:28

Feedback

# re: クエリー式とイテレータ 2008/02/12 15:03 R・田中一郎

ちなみに IEnumerable ってなんて発音するんでしょうか?

# re: クエリー式とイテレータ 2008/02/12 17:46 THREE-ONE

「あいえぬまらぶる」じゃないんですか?
私はそう呼んでます。

# re: クエリー式とイテレータ 2008/02/15 9:01 R・田中一郎

えぬまらぶるですか。
ありがとうございます。

# イテレータの後始末 2008/02/18 11:37 R.Tanaka.Ichiro's Blog

イテレータの後始末

# ciosvkHeAb 2011/11/28 20:27 http://www.spytown.com/

Edidn`t think about that. I'll tell my mother, she won`t believe it..!

# MMeGywoIcsp 2011/12/12 19:14 http://www.d4women.net/alesse.php

Author, keep doing in the same way..!

# uVSALCTJSIvjM 2011/12/16 0:52 http://www.yacanna.com/

I must admit, the webmaster is a cool guy..!

タイトル
名前
Url
コメント