C#をかじり始めました。LINQがなかなか面白そうだったので、試しに直積集合を作ってみました。
直積集合とは2つの集合$A, B$から次のように作られる集合です:
\left\{ (a, b) \mid {a \in A} \wedge {b \in B} \right\}
ペアの集合だけではつまらないので、九九表を出力するプログラムにしました:
Test.cs
using System;
using System.Linq;
public class Test
{
public static void Main()
{
var e = Enumerable.Range(1, 9);
var qq = from n in e from m in e select new {x = n, y = m, z = n*m};
foreach (var x in qq) Console.WriteLine(x.ToString());
}
}
from
を2つ重ねています。このクエリ式は下のSelectMany
拡張メソッドを使用した式と等価なようです。
Test.cs
using System;
using System.Linq;
public class Test
{
public static void Main()
{
var e = Enumerable.Range(1, 9);
var qq = e.SelectMany(n => e, (n, m) => new { x = n, y = m, z = n * m });
foreach (var x in qq) Console.WriteLine(x.ToString());
}
}
以上。