C# 기본 자습서의 IComparable 사용법, List 구현<br>.sort() 정렬

4141 단어
List.sort () 는 T에 대한 정렬을 실현할 수 있습니다. 예를 들어List.sort () 를 실행한 후 집합은 int에 따라 작은 것부터 큰 것까지 정렬됩니다.만약 T가 사용자 정의 Object이지만, 우리가 자신의 방식에 따라 정렬하고 싶다면, 어떻게 해야 합니까? 사실은 IComparable 인터페이스를 통해CompareTo를 다시 쓰는 방법으로 실현할 수 있습니다.프로세스는 다음과 같습니다.
하나.첫 번째 단계에서는 클래스 Person을 설명하지만 IComparable 인터페이스를 상속합니다.
 
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestIComparable
{
    public class Person : IComparable
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public int CompareTo(Person obj)
        {
            int result;
            if (this.Name == obj.Name && this.Age == obj.Age)
            {
                result = 0;
            }
            else
            {
                if (this.Name.CompareTo(obj.Name) > 0)
                {
                    result = 1;
                }
                else if (this.Name == obj.Name && this.Age > obj.Age)
                {
                    result = 1;
                }
                else
                {
                    result = -1;
                }
            }
            return result;
        }
        public override string ToString()
        {
            return this.Name + "-" + this.Age;
        }
    }
}

둘.그리고 주함수에서sort방법을 호출하면 됩니다.클래스는 이름에 따라 어릴 때부터 어른이 되고, 이름이 같으면 나이에 따라 어릴 때부터 어른이 된다.
 
  
public class Program
{
    public static void Main(string[] args)
    {
        List lstPerson = new List();
        lstPerson.Add(new Person(){ Name="Bob",Age=19});
        lstPerson.Add(new Person(){ Name="Mary",Age=18});
        lstPerson.Add(new Person() { Name = "Mary", Age = 17 });
        lstPerson.Add(new Person(){ Name="Lily",Age=20});
        lstPerson.Sort();
        Console.ReadKey();
    }
}

셋째, IComparable 인터페이스를 계승하지 않으면 우리는 어떻게 정렬을 실현해야 합니까?Linq를 사용하여 수행할 수 있습니다.사실 효과는 같다. 다만 클래스의 집합이 자주 정렬되어야 한다면 계승 인터페이스를 사용하는 방법을 권장한다. 이렇게 하면sort의 코드를 간소화하고 이해하기 쉽다.
 
  
public static void Main(string[] args)
        {
            List lstPerson = new List();
            lstPerson.Add(new Person(){ Name="Bob",Age=19});
            lstPerson.Add(new Person(){ Name="Mary",Age=18});
            lstPerson.Add(new Person() { Name = "Mary", Age = 17 });
            lstPerson.Add(new Person(){ Name="Lily",Age=20});
            lstPerson.Sort((x,y) =>
            {
                int result;
                if (x.Name == y.Name && x.Age == y.Age)
                {
                    result = 0;
                }
                else
                {
                    if (x.Name.CompareTo(y.Name) > 0)
                    {
                        result = 1;
                    }
                    else if (x.Name == y.Name && x.Age > y.Age)
                    {
                        result = 1;
                    }
                    else
                    {
                        result = -1;
                    }
                }
                return result;
            });
            Console.ReadKey();
        }

좋은 웹페이지 즐겨찾기