MRが楽しい

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

Sortを使ってリストの値や要素を元にソートを行う

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

Sort

List.Sort メソッドはリスト全体の要素を参照して並べ替えを行います。
比較メソッドをオーバーロードすることで要素内のプロパティを比較するなど並べ替えのロジックを指定することも可能です。
learn.microsoft.com

サンプルコード

以下のサンプルコードを作成しました。
一つ目のリストはリストの値をそのままソートし、二つ目のリストは比較メソッドをオーバーロードすることで要素内の文字列を元にソート処理を行っています。
・SortTest.cs

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

public class SortTest : MonoBehaviour
{
    private class NameNumber
    {
        public int Number;
        public string Name;
    }
    
    void Start()
    {
        // 値でソートする
        List<int> numberList = new List<int>() { 1, 5, 3, 4, 2 };
        
        Debug.Log($"{string.Join(",", numberList)}");
        
        numberList.Sort(); // 値でソートする
        
        Debug.Log($"{string.Join(",", numberList)}");

        // 特定の要素でソートする
        List<NameNumber> nameNumberList = new List<NameNumber>()
        {
            new NameNumber() { Number = 1, Name = "EEE" },
            new NameNumber() { Number = 5, Name = "DDD" },
            new NameNumber() { Number = 3, Name = "CCC" },
            new NameNumber() { Number = 4, Name = "BBB" },
            new NameNumber() { Number = 2, Name = "AAA" },
        };
        
        Debug.Log($"{string.Join(",", nameNumberList.Select(data => $"{data.Number}:{data.Name}"))}");

        nameNumberList.Sort(delegate(NameNumber x, NameNumber y)
        {
            return String.Compare(x.Name, y.Name, StringComparison.Ordinal); // Nameプロパティでソートする
        });

        Debug.Log($"{string.Join(",", nameNumberList.Select(data => $"{data.Number}:{data.Name}"))}");
    }
}