BT

InfoQ ホームページ ニュース LINQ to Objectsプロジェクト:EduLINQ、 MoreLINQ、LINQBridge

LINQ to Objectsプロジェクト:EduLINQ、 MoreLINQ、LINQBridge

ブックマーク

原文(投稿日:2011/03/10)へのリンク

EduLINQは、いかに LINQ to Objects オペレータが動くかを説明するための試みである。 MoreLINQ は、標準のオペレータを拡張した、LINQ to Objects オペレータのセットである。LINQBridge は、 LINQ to Objectsの.NET Framework 2.0へのポートである。

Jonathan Skeet氏は、2003年以来、 Microsoft C# MVPで、“C# in Depth”という本の著者であるが、最近 EduLINQプロジェクトという、LINQメソッドがいかに機能するかを説明する試みで、 LINQ to Objectsの再実装を終えた。 Apache License 2.0のもとにリリースされたこのプロジェクトには、ソースコードとユニットテストが付いていて、.NET Framework 3.5をターゲットにしている。氏による、学んだ教訓は以下である。

  • LINQ to Objectsは、拡張メソッド、デリゲート、IEnumerable<T> をベースにしている
  • オペレータは、適切であれば遅延実行を使い、可能であればデータを流す
  • オペレータは、元のソースを変えないで、適切なデータを返す新しいシーケンスを返す
  • クエリ式は、パターンのコンパイラ翻訳に基づいている。もうパターンを実装する必要はなく、関連するクエリ式だけである
  • イテレータ ブロックは、遅延実行を実装するのに非常に都合がいい
  • しかし、念入りの引数バリデーションが苦痛になる

氏は、MoreLINQと呼ばれるプロジェクトを作った。これは標準の LINQ to Objectオペレータを補完する 21ヶのオペレータ を持つライブラリである。

  • Batch – 「Batchは、ソース シーケンスをバケットの大きさにまとめる」
  • Consume –「完全に特定シーケンスを消費する。このメソッドは直ちに実行され、実行中のデータは保存しない」
  • EquiZip –「タプルの写像を返す。各タプルは、各引数のシーケンスからのN番目の要素を持っている」
  • MaxBy –「特定の写像を基に、特定シーケンスの最大要素を返す」
  • Scan – 「要素のシーケンスに対してスキャンを実行する(包括的なプレフィックスの合計)」
  • Zip –「タプルの写像を返す。各タプルは、各引数のシーケンスからのN番目の要素を持っている」

LINQBridge は、LINQ to Objectsを.NET Framework 2.0へポートしたもので、.NET Frameworkの以前のバージョンを使って、困っていた人たちにLINQの柔軟性とパワーを提供するものである。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。