...일반 목록을 어떻게 정렬합니까? 나는 일반적인 목록을 가지고
공개 목록 <ApprovalEventDto> ApprovalEvents
ApprovalEventDto는
public class ApprovalEventDto
{
public string Event { get; set; }
public DateTime EventDate { get; set; }
}
어떻게 이벤트 날짜별로 목록을 정렬 할있다?
...일반 목록을 어떻게 정렬합니까? 나는 일반적인 목록을 가지고
공개 목록 <ApprovalEventDto> ApprovalEvents
ApprovalEventDto는
public class ApprovalEventDto
{
public string Event { get; set; }
public DateTime EventDate { get; set; }
}
어떻게 이벤트 날짜별로 목록을 정렬 할있다?
에서 당신은 List.Sort()를 사용할 수 있습니다
ApprovalEvents.Sort((lhs, rhs) => (lhs.EventDate.CompareTo(rhs.EventDate)));
병합 정렬은 목록에 매우 적합합니다. 자세한 내용은 WikiPedia entry을 참조하십시오. 기본적으로 임의 액세스가 필요하지 않은 재귀 n-Log n 정렬입니다.
특정 데이터 형식의 경우 pigeon holing을 사용하여 더 많은 메모리 사용을 희생시키면서 순서 n을 얻을 수도 있습니다.
using System.Linq;
void List<ApprovalEventDto> sort(List<ApprovalEventDto> list)
{ return list.OrderBy(x => x.EventDate).ToList();
}
은하지 않습니다 실제로 지정된 것을하십시오 - 목록을 정렬하지 않으면 목록에 정렬 된보기를 반환합니다. 물론 충분히 좋을 수도 있습니다. 그러나 우리는 실제로 알지 못합니다. OP가 목록을 원하는 위치에 정렬하려면 List.Sort가 필요합니다. –
여전히 목록을 정렬하며 그대로는 아닙니다. –
"sort"라는 단어로 이해하는 것이 중요합니다. OrderBy는 데이터 소스를 전혀 수정하지 않지만 누군가가 콜렉션을 정렬하기를 원한다고 말하면 실제 콜렉션을 재정렬하기를 원한다는 의미로 사용합니다. 내가 전에 말했듯이, OP가 무엇을 필요로하는지는 불분명하다. –
익명 메서드 또는 람다 식으로 List.Sort() 메서드를 사용할 수 있습니다. 다음과 같이 더 MSDN
ApprovalEvents.Sort((x, y) => { return x.EventDate.CompareTo(y.EventDate); });
코드를 올바르게 형식을 지정하십시오. – Spoike
"새로운 비교"부분은 필요하지 않습니다. 형식 유추가 도움이 될 것입니다. (DarkSider의 답변을 참조하십시오.) –
당신이 현재 위치에서 정렬이 필요하지 않은 경우, 당신은 .NET 3.5을 사용하고, 나는 Marxidad가 제안한대로 OrderBy를 사용할 것이다. 기존 목록을 정렬해야하는 경우 List.Sort를 사용하십시오.
List.Sort는 비교 대리자 또는 IComparer 중 하나를 사용할 수 있습니다. 둘 중 하나를 선택하면 작업이 간단 해집니다.
내 MiscUtil 프로젝트에는 두 개의 매개 변수를 사용하고 CompareTo를 직접 호출하지 않고도 (OrderBy에서와 마찬가지로) 정렬 키를 지정할 수있는 ProjectionComparer가 있습니다. 나는 개인적으로 읽기 쉽다는 것을 알지만, 물론 그것은 당신에게 달린 것입니다. Darksiders 솔루션처럼
(..이 반전과 MiscUtil에서 비교를 결합하는 간단한 방법 예는 단위 테스트를 참조하십시오 또한),하지만 난 아닌 비밀을 유지하는 것을 선호 :
ApprovalEvents.Sort((a, b) => (a.EventDate.CompareTo(b.EventDate)));
ApprovalEvents.Sort ((lhs, rhs) => lhs.EventDate.CompareTo (rhs.EventDate)); 더 나은 작동 ... –
이 작동 ApprovalEvents.Sort ((lhs, rhs) => (lhs.EventDate.CompareTo (rhs.EventDate)))); –
수정 권한이있는 사람이 위의 답변을 수정해야합니다 ... – TheSoftwareJedi