Hatena::ブログ(Diary)

当面C#と.NETな記録 このページをアンテナに追加 RSSフィード

2007/7/12 (木)

[] LINQ で FizzBuzz  LINQ で FizzBuzzを含むブックマーク  LINQ で FizzBuzzのブックマークコメント

IEnumerable<T>病がじわじわ広まっているので、LINQでFizzBuzzしてみた(イミフ)。

http://golf.shinh.org/p.rb?FizzBuzz

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        foreach ( string str in Enumerable.Range( 1, 100 )
            .Select( n => FizzBuzz( n ) ) )
        {
            Console.WriteLine( str );
        }
        Console.ReadKey();
    }

    static string FizzBuzz( int n )
    {
        if ( 0 == n % 15 ) return "FizzBuzz";
        if ( 0 == n % 5 ) return "Buzz";
        if ( 0 == n % 3 ) return "Fizz";
        return n.ToString();
    }
}

あんまりLINQじゃない…。でも、LISP脳と考え方が近いのでニヤリ。

こうやって遊んでみるとLINQに足りないところがみえてきますね。今のところ、SQLの羊の皮をかぶって抵抗感を和らげているけど、次の版あたりでどう化けるのか楽しみでもあり、怖くもあり…。

NyaRuRuNyaRuRu 2007/07/13 00:05 まえどこかで某氏も書いてましたが ForEach 欲しいですな.

//タブは全角スペースになってます
static class Util
{
 public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
 {
  foreach (T item in source) { action(item); }
 }
}

class Program
{
 static void Main()
 {
  Enumerable.Range(1, 100).Select(
   n =>{
    if (0 == n % 15) return ”FizzBuzz”;
    if (0 == n % 5) return ”Buzz”;
    if (0 == n % 3) return ”Fizz”;
    return n.ToString();
   }).ForEach(Console.WriteLine);
  Console.ReadKey();
 }
}

NyaRuRuNyaRuRu 2007/07/13 00:17 ↓ .ToList() をそういう用途に使うのはどうなんだろ?
http://blogs.msdn.com/lukeh/archive/2007/07/11/c-3-0-and-codedom.aspx

siokoshousiokoshou 2007/07/13 07:08 ForEach欲しいですね。ToList().HOGE() いいですね!
あと、パターンマッチが欲しいです!FizzBuzz程度ならあっても変わらないけど…。
DoxBoxが一言「パターンマッチないの?」と言ってくれれば解決するかもw

2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 06 | 09 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 12 |
2009 | 01 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 07 |
2011 | 04 | 07 | 10 |
2012 | 04 | 12 |
2013 | 08 |
2014 | 03 | 08 |