C#でもMapBetween・改

C#でもMapBetween « be free

 

Zipメソッドを使うともっと簡単でした。

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

namespace ConsoleApplication1
{
    public static class EnumerableEx
    {
        public static IEnumerable<TResult> MapBetween<TValue, TResult>(this IEnumerable<TValue> source, Func<TValue, TValue, TResult> f)
        {
            return source
                .Zip(
                    source.Skip(1),
                    (x, y) => new { OldValue = x, NewValue = y })
                .Select(x => f(x.OldValue, x.NewValue));
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            var q = new[] { 1, 2, 3, 4, 5 }.MapBetween((a, b) => a + b);
            foreach (var n in q)
            {
                Console.WriteLine(n);
            }
        }
    }
}

 

パク・・・参考にしたのは、MVP for Linqことneueccさんの以下のエントリ。

neue cc – Reactive Extensionsで前後の値を利用する

 

流石・・・流石すぎる!

#またしてもGistに上げました。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中