効率的なC#のListソート:ラムダ式を使った便利な方法(List.Sort)

プログラミングにおいてデータのソートは非常に重要な処理の一つです。
特にC#で「List」を扱う際、ラムダ式を使用することで、より簡潔かつ効率的にソートが行えます。

本記事では、C#での「List」ソートの基本から、複数の条件を基にした高度なソート方法まで、実際のコード例を交えて解説します。
この記事を読むことで、ラムダ式を活用した柔軟なソートテクニックを身につけることができます。

記事のポイント

  • C#の「List」ソートの基本的な使用法
  • ラムダ式を使ったシンプルかつ効率的なソート
  • 複数条件でのソートや降順ソートの方法
目次

C#でのListソートの基本とラムダ式の活用方法

複数の条件を使ったListのソート方法

C#でListをソートする際、ラムダ式を使うことで複数の条件に基づいた並び替えが可能です。
例えば、Listの要素が複数のプロパティを持つ場合、最初に「年齢」で昇順ソートし、
その後「名前」で昇順に並べ替えることができます。

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}


var people = new List<Person>
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 },
    new Person { Name = "Charlie", Age = 25 }
};

people.Sort((x, y) => 
{
    int result = x.Age.CompareTo(y.Age);
    if (result == 0)
    {
        result = x.Name.CompareTo(y.Name);
    }
    return result;
});
// 結果
// Name = "Alice"  , Age = 25
// Name = "Charlie", Age = 25
// Name = "Bob"    , Age = 30

上記の例では、まず年齢で昇順に並び替え、その後に名前で昇順ソートしています。
ラムダ式を活用することで、このような複雑な条件を簡潔に記述できます。

Listを降順にソートする方法

降順でListをソートする際も、ラムダ式が非常に便利です。
例えば、数値のリストを降順に並び替える場合、次のように実装できます。

var numbers = new List<int> { 1, 5, 3, 7, 2 };
numbers.Sort((x, y) => y.CompareTo(x));
// 結果
// 7, 5, 3, 2, 1

ラムダ式内でCompareToの引数を逆にすることで、降順ソートが簡単に実現できます。
この方法は、特に大きなデータセットを扱う場合に非常に有効です。

List内の構造体をラムダ式でソートする方法

C#では、List内に構造体を持つこともあります。
その際も、ラムダ式を使用して簡単に並び替えができます。
以下の例では、構造体の一部である数値を基にソートを行います。

struct Product
{
    public string Name;
    public int Price;
}

var products = new List<Product>
{
    new Product { Name = "Product A", Price = 100 },
    new Product { Name = "Product B", Price = 50 },
    new Product { Name = "Product C", Price = 150 }
};

products.Sort((x, y) => x.Price.CompareTo(y.Price));
// 結果
// Name = "Product B", Price = 50
// Name = "Product A", Price = 100
// Name = "Product C", Price = 150

上記のコードでは、Product構造体のPriceプロパティを基に昇順でソートしています。
ラムダ式を用いることで、構造体のソートも非常に直感的に行うことができます。

C#のListソートで複数キーを使用した応用例

任意の順序でListを並び替える方法

場合によっては、特定の順序でListを並び替えたいことがあります。
例えば、リスト内の文字列を特定の順序で並び替える際、ラムダ式を使用して柔軟に対応できます。

var customOrder = new List<string> { "C", "A", "B" };
customOrder.Sort((x, y) => x.CompareTo(y));
// 結果
// "A", "B", "C"

このコードでは、CompareToメソッドを使い、文字列のリストをアルファベット順に並び替えています。
C#のラムダ式は、非常にシンプルな構文でリストの順序を自由にカスタマイズする力を持っています。

複数キーでソートする応用例

複数のキーでリストをソートする際、さらに強力なラムダ式を活用できます。
例えば、データベースから取得したオブジェクトのリストを複数の基準で並べ替える場合、
次のようなコードが有効です。

struct Item
{
    public string Category;
    public int Price;
}


var items = new List<Item>
{
    new Item { Category = "B", Price = 200 },
    new Item { Category = "A", Price = 300 },
    new Item { Category = "A", Price = 100 }
};

items.Sort((x, y) =>
{
    int result = x.Category.CompareTo(y.Category);
    if (result == 0)
    {
        result = x.Price.CompareTo(y.Price);
    }
    return result;
});
// 結果
// Category = "A", Price = 100
// Category = "A", Price = 300
// Category = "B", Price = 200

このコードでは、Categoryで昇順にソートし、同じカテゴリ内ではPriceで昇順に並び替えています。
このように、複数のキーを使ったソートもラムダ式を用いることで簡単に実現できます。

まとめ:C#のListソートとラムダ式の強力な活用法(List.Sort)

C#におけるListソートは、ラムダ式を活用することで非常に柔軟かつ効率的に行えます。
特に、複数条件でのソートや構造体を含むリストの並び替えなど、
実用的なテクニックを身につけることで、プログラムのパフォーマンス向上に繋がります。
是非、これらのテクニックを活用して、日常の開発に役立ててください。

他にもC#の様々なテクニックの紹介やエンジニアに役立つ情報を発信していますので興味のある方は以下のリンクからどうぞ!

C#やエンジニアに役立つ情報はこちら

収入を上げたいエンジニアはこちら

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