Search on the blog

2014年6月29日日曜日

C#入門(9)Action、Func、Predicateの違い

Action、Func、Predicateについて簡単に整理しておく。
  • Actionは、任意個の引数を取り、かつ、戻り値のないメソッドへのDelegate。
  • Funcは、任意個の引数を取り、かつ、戻り値のあるメソッドへのDelegate。
  • Predicateは、任意個の引数を取り、かつ、り値の型がBooleanであるようなメソッドへのDelegate。
簡単なサンプルを書いてみた。
using System;

public class Sample
{
    public static T[] Map<T> (T[] xs, Func<T, T> func)
    {
        T[] ret = new T[xs.Length];

        for (int i = 0; i < xs.Length; i++) {
            ret [i] = func (xs [i]);
        }

        return ret;
    }

    public static T[] Filter<T> (T[] xs, Predicate<T> predicate)
    {
        int size = 0;
        foreach (var x in xs) {
            if (predicate (x))
                ++size;
        }
        
        T[] ret = new T[size];
        int pos = 0;
        foreach (var x in xs) {
            if (predicate (x))
                ret [pos++] = x;
        }
        
        return ret;
    }

    public static void Each<T> (T[] xs, Action<T> action)
    {
        foreach (var x in xs) {
            action (x);
        }
    }

    public static void Main (string[] args)
    {
        int[] xs = {0,1,2,3,4,5,6,7,8,9};
        xs = Map (xs, (x) => x * x);
        xs = Filter (xs, (x) => x % 2 == 0);
        Each (xs, (x) => Console.WriteLine (x));
    }

}

0 件のコメント:

コメントを投稿