C# IComparableインターフェイスを用いてソート用比較メソッドを作る

//数値でソートする
//IComparable<T>インターフェイスのCompareToメソッドを
//実装し、数値(Student型のno変数)で比較した結果を
//Int32型で返す

using System;
using System.Collections.Generic;
using System.Text;

class Student : IComparable<Student>
{
    private Int32 no;
    private String name;
    public Student(Int32 no, String name)
    {
        this.no = no;
        this.name = name;
    }
    public Int32 No
    {
        get { return no; }
    }
    public String Name
    {
        get { return name; }
    }
    public Int32 CompareTo(Student student)
    {
        if (this.no < student.no)
        {
            return -1;
        }
        else if (this.no > student.no)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    public override String ToString()
    {
        return String.Format("No:{0}, Name:{1}", no, name);
    }
}

class Program
{
    static void Main(string[] args)
    {
        List<Student> l = new List<Student>();

        Random rand = new Random();
        for (Int32 i = 0; i < 10; i++)
        {
            Int32 no = rand.Next() % 1000;
            l.Add(new Student(no, "Name" + no));
        }

        l.Sort();

        l.ForEach(Console.WriteLine);
    }
}

  • 実行結果


  • No:6, Name:Name6
    No:120, Name:Name120
    No:209, Name:Name209
    No:226, Name:Name226
    No:349, Name:Name349
    No:366, Name:Name366
    No:497, Name:Name497
    No:518, Name:Name518
    No:876, Name:Name876
    No:938, Name:Name938




    //文字列でソートする
    //IComparable<T>インターフェイスのCompareToメソッドを
    //実装し、文字列(Student型のname変数)で比較した結果を
    //Int32型で返す
    
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    class Student : IComparable<Student>
    {
        private Int32 no;
        private String name;
        public Student(Int32 no, String name)
        {
            this.no = no;
            this.name = name;
        }
        public Int32 No
        {
            get { return no; }
        }
        public String Name
        {
            get { return name; }
        }
        public Int32 CompareTo(Student student)
        {
            return this.name.CompareTo(student.name);
        }
        public override String ToString()
        {
            return String.Format("No:{0}, Name:{1}", no, name);
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            List<Student> l = new List<Student>();
    
            Random rand = new Random();
            for (Int32 i = 0; i < 10; i++)
            {
                Int32 no = rand.Next() % 1000;
                l.Add(new Student(no, "Name" + no));
            }
    
            l.Sort();
    
            l.ForEach(Console.WriteLine);
        }
    }

  • 実行結果
  • No:187, Name:Name187
    No:28, Name:Name28
    No:300, Name:Name300
    No:429, Name:Name429
    No:509, Name:Name509
    No:76, Name:Name76
    No:760, Name:Name760
    No:8, Name:Name8
    No:940, Name:Name940
    No:993, Name:Name993