[c#] 사용자 정의 클래스 목록 정렬 <T>


Answers

cTag 클래스가 IComparable<T> 인터페이스를 구현해야한다는 것이 맞습니다. 그런 다음 목록에서 Sort() 를 호출하면됩니다.

IComparable<T> 인터페이스를 구현하려면 CompareTo(T other) 메서드를 구현해야합니다. 이를 수행하는 가장 쉬운 방법은 비교하려는 필드의 CompareTo 메소드를 호출하는 것입니다.이 경우는 날짜입니다.

public class cTag:IComparable<cTag> {
    public int id { get; set; }
    public int regnumber { get; set; }
    public string date { get; set; }
    public int CompareTo(cTag other) {
        return date.CompareTo(other.date);
    }
}

그러나 이것은 문자열 정렬 (문자열을 date로 선언했기 때문에)을 사용하기 때문에 잘 정렬되지 않습니다. 그래서 최선의 생각은 클래스를 재정의하고 날짜를 문자열로 선언하는 것이 아니라 DateTime이라고 선언하는 것입니다. 코드는 거의 동일하게 유지됩니다.

public class cTag:IComparable<cTag> {
    public int id { get; set; }
    public int regnumber { get; set; }
    public DateTime date { get; set; }
    public int CompareTo(cTag other) {
        return date.CompareTo(other.date);
    }
}

날짜를 포함하는 문자열을 DateTime 형식으로 변환하기 위해 클래스의 인스턴스를 만들 때 수행해야 할 작업이지만 DateTime.Parse(String) 메서드를 사용하여 쉽게 수행 할 수 있습니다.

Question

date 속성을 사용하여 목록을 정렬하고 싶습니다.

이것은 내 맞춤 클래스입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Test.Web
{
    public class cTag
    {
        public int id { get; set; }
        public int regnumber { get; set; }
        public string date { get; set; }
    }
}

이것은 내가 원하는 정렬 List 입니다 :

List<cTag> Week = new List<cTag>();

내가 원하는 것은 cTag 클래스의 date 속성으로 List를 정렬하는 것입니다. 날짜는 dd.MM.yyyy 형식입니다.

IComparable 인터페이스에 대해 읽었지만 사용 방법을 모른다.




YourVariable.Sort ((a, b) => a.amount.CompareTo (b.amount));




당신 말이 맞습니다 - IComparable을 구현해야합니다. 이렇게하려면 클래스를 선언하십시오.

public MyClass : IComparable
{
  int IComparable.CompareTo(object obj)
  {
  }
}

CompareTo에서는 사용자 정의 비교 알고리즘을 구현하기 만합니다 (DateTime 객체를 사용하여이 작업을 수행 할 수 있지만 먼저 "obj"유형을 확인해야합니다). 자세한 내용은 herehere 참조 here .




List<cTag> week = new List<cTag>();
week.Sort((x, y) => 
    DateTime.ParseExact(x.date, "dd.MM.yyyy", CultureInfo.InvariantCulture).CompareTo(
    DateTime.ParseExact(y.date, "dd.MM.yyyy", CultureInfo.InvariantCulture))
);



List 클래스의 오버로드 된 Sort 메서드를 살펴보십시오. 거기에 몇 가지 방법이 있습니다. 그들 중 하나 : 사용자 정의 클래스는 List 클래스의 Sort 메소드를 사용하여 IComparable 인터페이스를 구현해야합니다.






Related



Tags

c# c#   sorting