カテゴリ: C# 更新日: 2026/01/31

C#のLINQでDistinctを使って重複データを削除する方法!初心者でもわかるデータクエリの基本

C#のLINQでDistinctを使って重複データを削除する方法
C#のLINQでDistinctを使って重複データを削除する方法

先生と生徒の会話形式で理解しよう

生徒

「リストの中に同じ名前や数字がいくつも入ってしまったとき、一つだけにまとめる便利な方法はありますか?」

先生

「それならC#のLINQという機能にある『Distinct(ディスティンクト)』がぴったりですよ。重複したデータを取り除いて、スッキリさせることができます。」

生徒

「ディスティンクト……難しそうな名前ですね。パソコンをあまり触ったことがない私でも使えますか?」

先生

「大丈夫です!魔法の言葉を一つ付け加えるだけですから。具体的な使い方をゆっくり学んでいきましょう!」

1. Distinct(ディスティンクト)とは?

1. Distinct(ディスティンクト)とは?
1. Distinct(ディスティンクト)とは?

プログラミングをしていると、たくさんのデータが集まった「リスト」を扱うことがよくあります。 例えば、アンケートの結果や、買い物リストなどです。 その中に、偶然同じデータが複数含まれてしまうことがありますよね。 この「同じものが複数ある状態」を重複(ちょうふく)と言います。

Distinctは、英語で「他とはっきり異なる」という意味があります。 C#の世界では、「重複しているデータの中から、同じものは1つだけ残して、あとは全部取り除く」という命令のことを指します。 これを使うと、どんなにバラバラで重複が多いデータでも、ユニークな(唯一無二の)データだけの集まりに整理整頓できるのです。

この機能は、LINQ(リンク)という便利な道具箱の中に入っています。 LINQとは「Language Integrated Query」の略で、データの中から欲しいものだけを探したり、並べ替えたりするための専用の命令セットのことです。

2. なぜ重複を削除する必要があるの?

2. なぜ重複を削除する必要があるの?
2. なぜ重複を削除する必要があるの?

「別に重なっていてもいいじゃない?」と思うかもしれません。 しかし、実際のプログラム開発では、重複を消さないと困る場面がたくさんあります。

  • 名簿の整理: 同じ人が二回登録されていると、メールを二通送ってしまうかもしれません。
  • 売れ筋商品の確認: どのお客さんが何を買ったかという履歴から、「売れた商品の種類」だけを知りたいとき。
  • 計算の正確性: 重複した数字をそのまま合計してしまうと、正しい結果が出ません。

このように、データを正しく分析したり、無駄な処理を減らしたりするために、Distinctは欠かせない技術なのです。

3. 実際にDistinctを使ってみよう!

3. 実際にDistinctを使ってみよう!
3. 実際にDistinctを使ってみよう!

それでは、簡単な数字のリストを使って、実際に重複を消してみましょう。 プログラミング未経験の方でも安心してください。 まずは「1, 2, 2, 3, 4, 4, 5」という、2と4が重なっているリストを想像してみましょう。

サンプルコード:数字の重複を消す


using System;
using System.Collections.Generic;
using System.Linq; // LINQを使うためにこれが必要です!

class Program
{
    static void Main()
    {
        // 重複のある数字のリストを作ります
        List<int> numbers = new List<int> { 1, 2, 2, 3, 4, 4, 5 };

        // Distinctを使って重複を削除します
        var uniqueNumbers = numbers.Distinct();

        // 結果を表示します
        Console.WriteLine("重複を消した結果:");
        foreach (var n in uniqueNumbers)
        {
            Console.WriteLine(n);
        }
    }
}

実行結果


重複を消した結果:
1
2
3
4
5

いかがでしょうか?「2」と「4」が一つずつになり、綺麗に並びましたね。 プログラムの中の numbers.Distinct() という部分が、「重複を消してね!」という魔法の命令です。

4. 文字列(名前など)でも使える!

4. 文字列(名前など)でも使える!
4. 文字列(名前など)でも使える!

Distinctは数字だけでなく、文字(文字列)に対しても同じように使えます。 例えば、果物の名前が入ったリストから、何種類の果物があるか調べたい場合を見てみましょう。

サンプルコード:名前の重複を消す


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

class Program
{
    static void Main()
    {
        // 食べ物の名前が入ったリスト
        List<string> fruits = new List<string> { "りんご", "バナナ", "りんご", "みかん", "バナナ" };

        // 重複を除いて種類を特定
        var result = fruits.Distinct();

        foreach (var f in result)
        {
            Console.WriteLine(f);
        }
    }
}

実行結果


りんご
バナナ
みかん

このように、文字であっても「内容が全く同じもの」を賢く見つけ出して、一つにまとめてくれます。

5. 注意点:何をもって「同じ」とするか?

5. 注意点:何をもって「同じ」とするか?
5. 注意点:何をもって「同じ」とするか?

ここで少しだけ注意点があります。 コンピューターは非常に几帳面です。 例えば、文字の「A」と「a」は、私たち人間から見れば同じアルファベットですが、コンピューターにとっては「大文字」と「小文字」という全く別のデータとして扱われます。

もし、大文字と小文字も区別せずに重複として消したい場合は、もう少し高度な設定が必要になります。 まずは基本として、「完全に一致するものだけが消える」と覚えておきましょう。

6. 用語解説:初心者向けのキーワード辞典

6. 用語解説:初心者向けのキーワード辞典
6. 用語解説:初心者向けのキーワード辞典

ここまでに出てきた難しい言葉をおさらいしましょう。

用語 読み方 意味をやさしく説明
LINQ リンク 大量のデータの中から、必要なものだけを取り出したり加工したりする便利な道具。
Distinct ディスティンクト 「同じものは一つにまとめる」というLINQの命令。
List リスト データを順番に入れておくための入れ物(箱)。
Query クエリ データに対する「問い合わせ」や「命令」のこと。
var バー 「どんな種類のデータが入るか、コンピューターに任せるよ」という宣言。

7. LINQを使うための準備

7. LINQを使うための準備
7. LINQを使うための準備

C#でDistinctなどのLINQ機能を使うときには、プログラムの冒頭に必ず書かなければならない「おまじない」があります。 それが using System.Linq; です。

これは、「今からLINQという道具箱を使いますよ」とコンピューターに宣言するものです。 もしこれを書き忘れると、Distinct と書いても「そんな命令は知りません」とエラーになってしまいます。 パソコンに慣れていないうちは、この一行を忘れがちなので注意しましょう。

8. まとめとしての補足:Distinctのメリット

8. まとめとしての補足:Distinctのメリット
8. まとめとしての補足:Distinctのメリット

Distinctを使う最大のメリットは、「プログラムが短く、読みやすくなる」ことです。 もしDistinctを使わずに重複を消そうとすると、「今のデータがすでに出現したかどうかをチェックして、まだなければ新しいリストに追加して……」という、とても長くて複雑な命令を書かなければなりません。

それがLINQのDistinctを使えば、たった一言付け足すだけで終わります。 これは、プログラミングの世界では「可読性(かどくせい)が高い」と言われ、ミスを減らすためにも非常に重要なことです。

これからC#を学んでいく中で、大量のデータを扱う機会は必ず増えてきます。 そのときに、この「Distinct」という便利な魔法を思い出してください。 バラバラだったデータが、一瞬で美しく整理される快感を味わえるはずです。

カテゴリの一覧へ
新着記事
New1
C#
C#の列挙型(enum)とは?定義方法と活用例を初心者向けに解説
New2
COBOL
COBOLの帳票をデジタル化!電子帳票化(PDF出力・外部ツール活用)への移行例
New3
C#
C#のデストラクタ(ファイナライザ)の使い方と注意点をやさしく解説!
New4
C#
C#のオーバーライド(override)の基本と使い方を解説
人気記事
No.1
Java&Spring記事人気No1
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.4
Java&Spring記事人気No4
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.5
Java&Spring記事人気No5
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.6
Java&Spring記事人気No6
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.7
Java&Spring記事人気No7
C#
C#のプロパティとは?get/setアクセサの書き方と使い分け
No.8
Java&Spring記事人気No8
COBOL
COBOLのMOVE文を完全ガイド!初心者でもわかるデータ移送の基本