nabeatsu イテレータ

ネタです(ブームはとっくの昔に終わりましたが…)。

3の倍数と3のつく数のときだけ、渡されたコードブロックを実行するイテレータを定義してみます。

class Range
  def nabeatsu
    self.each do |num|
      if (num % 3 == 0) || num.to_s.include?("3") then
        yield(num)
      end
    end
  end
end

実際に使ってみます。

(1..25).nabeatsu do |num|
  print(num)
  print("\n")
end

実行結果がこちら。

f:id:griefworker:20090331093649p:image

Ruby オモロ〜

C# でも書いてみました。

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

namespace NabeatsuSample
{
    class Program
    {
        static void Main(string[] args)
        {
            Enumerable.Range(1, 100).Nabeatsu((num) => Console.WriteLine(num));
            Console.ReadLine();
        }
    }

    public static class Util
    {
        public static void Nabeatsu(this IEnumerable<int> array, Action<int> block)
        {
            foreach (var num in array)
            {
                if ((num % 3 == 0) || (num.ToString().Contains("3")))
                {
                    block(num);
                }
            }
        }
    }
}

でも Ruby の方がスッキリしていて読みやすいですね。