技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

ソートしてみる

ソートを行うコードをいろいろ書いてみる。
まずは外部定義でソート条件を記述するタイプ。

class SampleSortable : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return x.Length > y.Length ? 1 : -1;
    }
}

class Program
{
    static void Main(string[] args)
    {
        string[] dataSets = {"someone", "else", "something wrong" };
        SampleSortable sorter = (new SampleSortable());

        Array.Sort<string>(dataSets, sorter);

        Array.ForEach<string>(
            dataSets,
            delegate(string val) {
                Console.WriteLine("Elem : " + val);
            });
        Console.ReadLine();
    }
}

次は、自身がソート可能な場合。

class SampleCompareable : IComparable<SampleCompareable>
{
    public string message { get; set; }

    public override string ToString()
    {
        return this.message;
    }

    public int CompareTo(SampleCompareable other)
    {
        return this.message.Length - other.message.Length;
    }
}


class Program
{
    static void Main(string[] args)
    {
        SampleCompareable[] sortTarget
            = {
                new SampleCompareable() { message="someone" },
                new SampleCompareable() { message="else" },
                new SampleCompareable() { message="something" }
            };

        Array.Sort<SampleCompareable>(sortTarget);

        Array.ForEach<SampleCompareable>(
            sortTarget,
            delegate(SampleCompareable val)
            {
                Console.WriteLine("Elem : " + val);
            });
        Console.ReadLine();
    }
}