【Unity】【エディタ拡張】文字列を「良い感じ」にソートしてくれるEditorUtility.NaturalCompare()

Unityで文字列を「良い感じ」にソートしてくれるEditorUtility.NaturalCompare()の紹介です。

Unity2020.1

いい感じにソート?

今、以下のように適当な文字列のリストを用意します。

abc5
abc
123
abc32
abc1234

これをLinqとかで機械的にソートすると以下のようになります。

123
abc
abc1234
abc32
abc5

場合によってはこれでいいのですが、abc以下の数値を小さい順(つまり5 -> 32 -> 1234)に並べたいケースも少なく無いかと思います。
EditorUtility.NaturalCompare()はこの辺りをいい感じにソートしてくれるメソッドです。

使ってみる

それでは実際に使ってみます。

using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Example
{
    [MenuItem("Example/Example")]   
    public static void NaturalCompareExample()
    {
        var texts = new List<string>
        {
            "abc5",
            "abc",
            "123",
            "abc32",
            "abc1234",
        };
        
        // NaturalCompareを使っていい感じにソート
        texts.Sort(EditorUtility.NaturalCompare);

        var result = string.Empty;
        foreach (var text in texts)
        {
            result += $"{text}{Environment.NewLine}";
        }
        Debug.Log(result);
    }
}

結果は以下のようになります。

123
abc
abc5
abc32
abc1234

いい感じにソートされることが確認できました。

参考

docs.unity3d.com