平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

Pythonのリスト内包表記とLINQのクエリ構文を比べてみた

元ネタ→Pythonのリスト内包表記で色々な数列を作ってみた - アジャイルSEを目指すブログ

デブサミ2008でも「なんでリスト内包みたいにしなかったの」と聞かれていたぐらいなんで、リスト内包とクエリ構文は似たところがある。

クエリ構文の方が長いけど、好きに改行・インデントできる。
それに、letが使えるのも地味に便利(fibを見よ)。

var l = from x in Enumerable.Range(0, 10)
        select x;
 
var power = from x in Enumerable.Range(0, 10)
            select x * x;
 
var even = from x in Enumerable.Range(0, 10)
           where x % 2 == 0
           select x;
 
var table = from x in Enumerable.Range(1, 9)
            select (from y in Enumerable.Range(1, 9)
                    select x * y);
 
var prime = from x in Enumerable.Range(2, 99)
            where !(from y in Enumerable.Range(2, x - 2)
                    where x % y == 0
                    select y).Any()
            select x;
 
var fib = from x in new[] { new[] { 0, 1 } }
          from y in Enumerable.Range(1, 18)
          let x0 = x[0]
          let x1 = x[1]
          let x2 = x[0] + x[1]
          where ((x[0] = x1) + (x[1] = x2) > 0)
          select x0;