トルネード

毛利のメモ書き

C# List<T>ソート

internal class TListSort<_T> : List<_T>, IComparer<_T>
{
    private Func<_T, _T, int> __func;
    public TListSort(Func<_T, _T, int> _f1)
    {
        __func = _f1;
    }
    public new void Sort()
    {
        Sort(this);
    }

    int IComparer<_T>.Compare(_T x, _T y)
    {
        return __func(x,y);
    }
}

上記のような感じで作っておくと自由にソートが設定できる。

利用方法

static void Main(string[] args)
{
    var _list_sort = new TListSort<int>((int x, int y) =>
    {
        return (x > y) ? 1 : -1;//ここでSortしたい内容を書く
        //return (x < y) ? 1 : -1;//逆ソートしたい場合
    }) { 3, 4, 32, 1 ,100, 2};
    _list_sort.Sort();

    foreach (var _i in _list_sort)
    {
        Console.WriteLine("list = {0}", _i);
    }
    Console.WriteLine("end");
}

f:id:mojeld:20190112221235p:plain