【C#】List.Sortメソッドでリストの要素を昇順に並べ替える方法

目次

List<T>のソート(並べ替え)

C#のList<T>(ジェネリックリスト)は、データを動的に追加・削除できるため非常に便利ですが、格納されたデータを特定の順序(例: 数値の小さい順、アルファベット順)に並べ替えたい(ソートしたい)という要求も頻繁に発生します。

List<T>クラスは、この並べ替え操作を簡単に行うためのSortというインスタンスメソッドを提供しています。


List<T>.Sort() メソッド

List<T>.Sort()メソッドは、リスト内の要素を、その型が持つデフォルトの比較ルール(intなら数値の大小、stringなら辞書順)に従って昇順に並べ替えます。

重要な特性:インプレース(In-Place)操作

List<T>.Sort()メソッドは、Array.Sortと同様に、**インプレース(In-Place)**で動作します。

これは、Sort()メソッドが新しいリストを生成して返すのではなく、メソッドを呼び出した元のList<T>インスタンス自体を直接変更する(中身を書き換える)ことを意味します。このメソッドの戻り値はvoid(何も返さない)です。

var numbers = new List<int> { 5, 1, 3 };

// numbers リスト自体が { 1, 3, 5 } に書き換わる
numbers.Sort(); 

// 戻り値は void なので、以下のような記述はできない
// var sortedList = numbers.Sort(); // コンパイルエラー

(注: 元のリストを変更せず、新しいソート済みシーケンスを取得したい場合は、LINQのOrderBy()メソッドを使用します。)


コード例1:List<string>(文字列)の昇順ソート

List<string>に対してSort()を実行すると、アルファベット順(辞書順)に並べ替えられます。

using System;
using System.Collections.Generic;

public class ListSortStringExample
{
    public static void Main()
    {
        // 1. 元の文字列リストを定義
        var categories = new List<string>
        {
            "Monitors",
            "Keyboards",
            "Cables",
            "Adapters"
        };

        Console.WriteLine("--- 実行前 (文字列) ---");
        PrintList(categories);

        // 2. Sort() を呼び出し (元のリストが変更される)
        categories.Sort();

        Console.WriteLine("\n--- 実行後 (アルファベット順) ---");
        PrintList(categories);
    }

    // リストの要素を出力するヘルパーメソッド
    private static void PrintList(List<string> list)
    {
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }
    }
}

出力結果:

--- 実行前 (文字列) ---
Monitors
Keyboards
Cables
Adapters

--- 実行後 (アルファベット順) ---
Adapters
Cables
Keyboards
Monitors

コード例2:List<int>(数値)の昇順ソート

List<int>に対してSort()を実行すると、数値の小さい順(昇順)に並べ替えられます。

using System;
using System.Collections.Generic;

public class ListSortNumericExample
{
    public static void Main()
    {
        // 1. 元の数値リストを定義
        var scores = new List<int> { 95, 70, 100, 82, 91 };

        Console.WriteLine("--- 実行前 (数値) ---");
        PrintList(scores);

        // 2. Sort() を呼び出し (元のリストが変更される)
        scores.Sort();

        Console.WriteLine("\n--- 実行後 (昇順) ---");
        PrintList(scores);
    }

    // リストの要素を出力するヘルパーメソッド
    private static void PrintList(List<int> list)
    {
        Console.WriteLine(string.Join(", ", list));
    }
}

出力結果:

--- 実行前 (数値) ---
95, 70, 100, 82, 91

--- 実行後 (昇順) ---
70, 82, 91, 95, 100

補足:降順(大きい順)に並べ替える方法

List<T>.Sort()メソッドは、それ単体では昇順にしか並べ替えられません。

もし降順(大きい順、または辞書順の逆)に並べ替えたい場合は、Sort()を実行したで、List<T>.Reverse()(リストを逆順にする)メソッドを呼び出すのが最も一般的なテクニックです。Reverse()メソッドもインプレースで動作します。

コード例3:降順ソート(Sort + Reverse)

using System;
using System.Collections.Generic;

public class ListSortDescendingExample
{
    public static void Main()
    {
        var scores = new List<int> { 95, 70, 100, 82, 91 };

        Console.WriteLine("--- 実行前 ---");
        PrintList(scores);

        // 1. まず昇順にソートする (70, 82, 91, 95, 100)
        scores.Sort();

        // 2. 昇順になったリストを、さらに逆順にする
        scores.Reverse();

        Console.WriteLine("\n--- 実行後 (降順) ---");
        PrintList(scores);
    }
    
    private static void PrintList(List<int> list)
    {
        Console.WriteLine(string.Join(", ", list));
    }
}

出力結果:

--- 実行前 ---
95, 70, 100, 82, 91

--- 実行後 (降順) ---
100, 95, 91, 82, 70

まとめ

List<T>.Sort()メソッドは、List<T>の要素を「インプレース(元のリストを変更)」で「昇順」に並べ替えるための、最も基本的なインスタンスメソッドです。

intstringなど、比較可能な多くの型に対して機能します。降順にソートしたい場合は、Sort()の後にReverse()を組み合わせて使用します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次