PR

[C# LINQ] データを昇順、降順に並び替える(OrderBy)

スポンサーリンク

データを昇順、降順で並び替える(OrderBy)

配列、コレクションのデータを昇順に並び替えるにはOrderByメソッドを、
降順に並び替えるにはOrderByDescendingメソッドを使います。

OrderByメソッドOrderByDescendingメソッドそれぞれの引数にはデータの並び替えに使用するキーを返すメソッドを指定します。ここにはラムダ式を使い匿名関数を渡します。
ラムダ式の使い方は、[C# 入門] 匿名関数(ラムダ式)の使い道を見てください。

キーを返すメソッドの引数配列、コレクションの要素のデータ型です。
戻り値並べ替えに使うキー(数値、文字列など)を返します。

LINQを使うには先頭に using System.Linq; が必要です。
サンプルではSampleDataクラスのData1をキーとして並び替えをしています。

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    public static void Main()
    {
        // SampleDataクラスのリストの宣言と初期化
        List<SampleData> list = new List<SampleData> {
            new SampleData { Data1 = 11, Data2 = 20, },
            new SampleData { Data1 = 12, Data2 = 20, },
            new SampleData { Data1 = 10, Data2 = 22, },
            new SampleData { Data1 = 10, Data2 = 21, },
            new SampleData { Data1 = 10, Data2 = 20, },
        };

        // 昇順ソート
        var order_list1 = list.OrderBy(d => d.Data1);
        Console.WriteLine("OrderByを使って昇順ソート(キーはData1)");
        foreach (var data in order_list1) Console.WriteLine($"data1={data.Data1}, data2={data.Data2}");

        // 降順ソート
        var order_list2 = list.OrderByDescending(d => d.Data1);
        Console.WriteLine("OrderByDescendingを使って降順ソート(キーはData1)");
        foreach (var data in order_list2) Console.WriteLine($"data1={data.Data1}, data2={data.Data2}");
    }
}

class SampleData
{
    public int Data1 { get; set; }
    public int Data2 { get; set; }
}

出力結果はこんな感じです。

OrderByを使って昇順ソート(キーはData1)
data1=10, data2=22
data1=10, data2=21
data1=10, data2=20
data1=11, data2=20
data1=12, data2=20
OrderByDescendingを使って降順ソート(キーはData1)
data1=12, data2=20
data1=11, data2=20
data1=10, data2=22
data1=10, data2=21
data1=10, data2=20
スポンサーリンク

複数キーで並び替える(OrderBy + ThenBy)

複数のキーを使って並べ替えをするには、OrderByメソッド、OrderByDescendingメソッドの後ろにThenByメソッドThenByDescendingメソッドをつなげて書きます。

昇順で並べる場合はThenByメソッド、降順で並べる場合はThenByDescendingメソッドを使います。

ThenByメソッド、ThenByDescendingメソッドもOrderByメソッドと同じく並び替えに使用するキーを返すメソッドを指定します。

OrderByで1つ目のキー、ThenByで2つ目のキーを指定する感じです。さらにThenByをつなげて、3つ目、4つ目と複数キーを指定することができます。

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    public static void Main()
    {
        // SampleDataクラスのリストの宣言と初期化
        List<SampleData> list = new List<SampleData> {
            new SampleData { Data1 = 11, Data2 = 20, },
            new SampleData { Data1 = 12, Data2 = 20, },
            new SampleData { Data1 = 10, Data2 = 22, },
            new SampleData { Data1 = 10, Data2 = 21, },
            new SampleData { Data1 = 10, Data2 = 20, },
        };

        // 複数キーでの並べ替え(Data1昇順、Data2昇順)
        var order_list3 = list.OrderBy(d => d.Data1).ThenBy(d => d.Data2);
        Console.WriteLine("OrderByでData1を昇順に並べた後でThenByでData2の昇順に並べる");
        foreach (var data in order_list3) Console.WriteLine($"data1={data.Data1}, data2={data.Data2}");

        // 複数キーでの並べ替え(Data1昇順、Data2降順)
        var order_list4 = list.OrderBy(d => d.Data1).ThenByDescending(d => d.Data2);
        Console.WriteLine("OrderByでData1を昇順に並べた後でThenByDescendingでData2の降順に並べる");
        foreach (var data in order_list4) Console.WriteLine($"data1={data.Data1}, data2={data.Data2}");
    }
}

class SampleData
{
    public int Data1 { get; set; }
    public int Data2 { get; set; }
}

処理結果はこんな感じです。

OrderByでData1を昇順に並べた後でThenByでData2の昇順に並べる
data1=10, data2=20
data1=10, data2=21
data1=10, data2=22
data1=11, data2=20
data1=12, data2=20
OrderByでData1を昇順に並べた後でThenByDescendingでData2の降順に並べる
data1=10, data2=22
data1=10, data2=21
data1=10, data2=20
data1=11, data2=20
data1=12, data2=20

C# 記事まとめページに戻る(他のサンプルコードもこちら)

C# プログラミング講座
C#についての記事まとめページです。開発環境VisualStudioのインストール方法や使い方、プログラミングの基礎知識についてや用語説明の記事一覧になっています。講座の記事にはすぐに実行できるようにサンプルコードを載せています。

コメント