コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】LINQ で使用できる拡張メソッドが増える「Linq.Extras」紹介

はじめに

「Linq.Extras」をプロジェクトに追加することで
LINQ で使用できる拡張メソッドが増えます

インストール

f:id:baba_s:20180129175245p:plain

Visual Studio メニューの「ツール>NuGet パッケージ マネージャー>
ソリューションの NuGet パッケージの管理」を選択します

f:id:baba_s:20180129180838p:plain

「参照」タブを選択して、検索欄に「Linq.Extras」と入力して
表示された「Linq.Extras」を選択します

f:id:baba_s:20180129180852p:plain

インストールしたいプロジェクトをチェックして「インストール」ボタンを押します

使い方

using Linq.Extras;

「Linq.Extras」を使用する際は、ソースコードの先頭に上記の using を追加します

拡張メソッド一覧

DistinctBy, IntersectBy, UnionBy, ExceptBy, SequenceEqualBy

var result = items.DistinctBy( c => c.Name );

DistinctUntilChanged

var input = new[] { 1, 1, 1, 2, 3, 3, 1, 3, 2, 2, 1 };
var result = input.DistinctUntilChanged(); // 1, 2, 3, 1, 3, 2, 1

MinBy, MaxBy

var winner = players.MaxBy( c => c.Score );

RankBy, DenseRankBy

var ranking = players.RankByDescending( player => player.Score, ( player, rank ) => {} );

LeftOuterJoin, RightOuterJoin, FullOuterJoin

var result = left.OuterJoin( right, x => x.Id, y => y.Id, ( id, x, y ) => new { x, y } );

ToHierarchy

var roots = items.ToHierarchy( c => c.Id, c => c.ParentId );

Flatten

var flat = roots.Flatten( c => c.Children, TreeTraversalMode.DepthFirst );

関連記事