MRが楽しい

MRやVRについて学習したことを書き残す

System.LinqのOrderByを使ってリストの値や要素を元にソートを行う

本日は C# の小ネタ枠です。
System.Linq の OrderBy を使ってリストの値や要素を元にソートを行う方法を記事にします。

OrderBy

System.Linq の OrderBy メソッドはリスト全体の要素を参照して昇順に並べ替えを行います。
並べ替えに使用する要素のキーを引数で指定できます。
learn.microsoft.com

因みに降順で並べ替えを行いたい場合は OrderByDescending を利用します。
learn.microsoft.com

サンプルコード

以下のサンプルコードを作成しました。
一度目のソートは要素が持つ Id の値で昇順に並べ替えを行い、二度目のソートは Name の値で昇順に並べ替えを行っています。
・OrderByTest.cs

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

public class OrderByTest : MonoBehaviour
{
    class TestData
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    void Start()
    {
        var testDataList = new List<TestData>()
        {
            new TestData() { Id = 1, Name = "MNO" },
            new TestData() { Id = 4, Name = "JKL" },
            new TestData() { Id = 3, Name = "GHI" },
            new TestData() { Id = 2, Name = "DEF" },
            new TestData() { Id = 5, Name = "ABC" },
        };

        // リストをそのままの順番で表示
        Debug.Log($"original : {string.Join(",", testDataList.Select(data => $"{data.Id}:{data.Name}"))}");

        // Id で昇順に並び替えて表示
        var orderById = testDataList.OrderBy(data => data.Id);
        
        Debug.Log($"OrderById : {string.Join(",", orderById.Select(data => $"{data.Id}:{data.Name}"))}");

        // Name で昇順に並び替えて表示
        var orderByName = testDataList.OrderBy(data => data.Name);
        
        Debug.Log($"OrderByName : {string.Join(",", orderByName.Select(data => $"{data.Id}:{data.Name}"))}");
        
        // Id で降順に並び替えて表示
        var orderByIdDescending = testDataList.OrderByDescending(data => data.Id);
        
        Debug.Log($"OrderByIdDescending : {string.Join(",", orderByIdDescending.Select(data => $"{data.Id}:{data.Name}"))}");
    }
}