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 件のコメント:
コメントを投稿