RxでFizzBuzz
難しそうでずっと敬遠してたReactive Extensionsをやっとこさ勉強しよういう気になって、理解のとっかかりにFizzBuzzなぞ。
C#での最短はよこけんさんのブログにあるやつだろうけど、なんかRxでやってみたくなってサブスクライブっちゃった。反省はしていません。
using System; using System.Reactive.Linq; namespace ConsoleApplication14 { class Program { static void Main(string[] args) { var line = Observable.Range(1, 100); var fizz = line.Where(a => a % 3 == 0).Select(_ => "Fizz"); var buzz = line.Where(a => a % 5 == 0).Select(_ => "Buzz"); var number = line.Where(a => a % 3 * a % 5 > 0).Select(a => a.ToString()); fizz.Merge(buzz) .Merge(number) .Merge(line.Select(_ => "\r\n")) .Subscribe(a => Console.Write(a)); } } }
あらま、forとかforeach無しで行けるなんてステキ。
ちなみに、Reactive Extensionについての説明はneueさんのサイトがとても詳しいです。