.net column

.NET開発者のためのブログメディア
データの取得

【LINQのメソッド紹介その4】Distinctで重複なしにデータを取得する

2020年02月17日

LINQのDistinctメソッドは、コレクションクラスのデータで重複がある場合において、重複なしのデータを取得したい時に役立ちます。例えば、コレクションクラスに含まれているデータの種類がどのくらいあるかを調べるなど、データ処理を行う際に重複なしで取得したい場面はしばしば出てくるでしょう。

PG
LINQでコレクションクラスの中のデータで重複がある場合に、それを除いたデータの種類を数えたい時はどうしたらいいですか?
PM
それならDistinctメソッドを使うといいですよ。わざわざ重複を判定する処理を作らずに済むので楽になります。早速詳しい使い方を見ていきましょう。

LINQのDistinctメソッドでできること

Distinctメソッドは、コレクションクラスに対して、重複するデータを取り除いたデータを返すメソッドです。コレクションクラスのデータ処理においては、しばしば必要となる場面もあり、コレクションクラスを走査しながら重複を排除していくなどの処理をしなければなりません。Distinctメソッドは、この手間を大幅に簡略化できるので、重宝するメソッドになるでしょう。

Distinctメソッドのサンプルコート

LINQにおけるDistinctメソッドの使い方はシンプルで、コレクションクラスを返す処理に対して「.Distinct()」と付けるだけになります。これだけで、処理されたコレクションに対して重複を取り除いたコレクションクラスを取得することが可能です。また、重複ありのコレクションクラスも利用する場合は、Distinctメソッドを使って絞り込むと良いでしょう。

実行結果

このコードでは、重複する要素を除いた要素を表示します。

実行結果

このコードでも、重複する要素を取り除き表示していますが、完全一致しない(余分な空白を含んでいる)要素は新しい要素として認識されます。この場合、あらかじめ空白を取り除くなどの処理が必要です。

PG
重複を取り除く処理を作りこむと面倒だけど、Distinctメソッドでは一行で済みますね!
PM
そうですね。使う場面も度々あるので、うまく使いこなしていきたいメソッドでしょう。ただ、サンプルにもあるようにデータの中身に含まれる余分な空白などはあらかじめ処理しないといけないケースもあります。

LINQのDistinctメソッドで配列処理をスリムに

配列処理は一つ目のデータから順に走査していきながら、条件を加えて処理をしていくことが多くあります。重複処理もその一つで、取得したデータが「前までのデータとして既出していないか」を順に走査する必要がありますが、Distinctメソッドで重複データを処理する手間を大幅に簡略化することが可能です。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)