c# 오름차순 리스트 - 사용자 정의 클래스 목록 정렬 <T>




5 Answers

이를 수행하는 한 가지 방법은 delegate 과 함께하는 것입니다.

List<cTag> week = new List<cTag>();
// add some stuff to the list
// now sort
week.Sort(delegate(cTag c1, cTag c2) { return c1.date.CompareTo(c2.date); });
list sort

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 인터페이스에 대해 읽었지만 사용 방법을 모른다.




이 경우 LINQ를 사용하여 정렬 할 수도 있습니다.

week = week.OrderBy(w => DateTime.Parse(w.date)).ToList();



먼저 날짜 속성이 날짜를 저장하는 경우 DateTime을 사용하여 저장합니다. 정렬을 통해 날짜를 구문 분석하면 비교되는 각 항목에 대해 파싱해야합니다. 그다지 효율적이지 않습니다 ...

그런 다음 IComparer를 만들 수 있습니다.

public class TagComparer : IComparer<cTag>
{
    public int Compare(cTag first, cTag second)
    {
        if (first != null && second != null)
        {
            // We can compare both properties.
            return first.date.CompareTo(second.date);
        }

        if (first == null && second == null)
        {
            // We can't compare any properties, so they are essentially equal.
            return 0;
        }

        if (first != null)
        {
            // Only the first instance is not null, so prefer that.
            return -1;
        }

        // Only the second instance is not null, so prefer that.
        return 1;
    }
}

var list = new List<cTag>();
// populate list.

list.Sort(new TagComparer());

델리게이트로도 할 수 있습니다.

list.Sort((first, second) =>
          {
              if (first != null && second != null)
                  return first.date.CompareTo(second.date);

              if (first == null && second == null)
                  return 0;

              if (first != null)
                  return -1;

              return 1;
          });



당신은 linq를 사용할 수 있습니다 :

var q = from tag in Week orderby Convert.ToDateTime(tag.date) select tag;
List<cTag> Sorted = q.ToList()



빨리 답변 해 주셔서 감사합니다.

이것이 나의 해결책이다 :

Week.Sort(delegate(cTag c1, cTag c2) { return DateTime.Parse(c1.date).CompareTo(DateTime.Parse(c2.date)); });

감사




Related


Tags

c#   sorting