확장 방법을 사용하여 여러 기준에서 목록의 유창한 정렬?
-
03-07-2019 - |
문제
여러 기준으로 목록을 정렬하려면 현재 다음과 같은 작업을 수행하고 있습니다.
collection.Sort((f1, f2) =>
{
var comp = f1.FirstCriteria.CompareTo(f2.FirstCriteria);
return comp != 0 ? comp : f1.SecondCriteria.CompareTo(f2. SecondCriteria);
});
그러나 다음과 같은 일을 할 수 있다는 것은 좋지 않을 것입니다.
collection.MultipleSort(f1.FirstCriteria, f2.FirstCriteria)
.Then(f1.SecondCriteria, f2.SecondCriteria)
정렬을위한 유창한 인터페이스를 잘 구현하기위한 아이디어가 있습니까?
해결책
다음과 같은 것을 의미합니까?
using System.Linq;
collection.OrderBy(t => t.FirstCriteria).ThenBy(t => t.SecondCriteria);
다른 팁
여기서 문제는 당신이하고 싶은 것처럼 들린다는 것입니다. 제자리에 종류; 이 경우 조건 추가를 완료했을 때 (유창한 API와 함께) 알아야합니다. 이것은 LINQ 접근법과 대조됩니다. 이는 연기 된 실행을 사용하기 때문입니다.
단일 조건 정렬의 경우 다음과 같은 것을 사용할 수 있습니다.
public static void Sort<TSource, TValue>(this List<TSource> source,
Func<TSource, TValue> selector) {
var comparer = Comparer<TValue>.Default;
source.Sort((x,y)=>comparer.Compare(selector(x),selector(y)));
}
public static void SortDescending<TSource, TValue>(this List<TSource> source,
Func<TSource, TValue> selector) {
var comparer = Comparer<TValue>.Default;
source.Sort((x,y)=>comparer.Compare(selector(y),selector(x)));
}
여러 종류의 경우 더 어려울 것입니다. 당신은 사용할 수 없습니다 params
각각 TValue
다를 수 있습니다. 터미네이터 단계와 중개자 "빌더"클래스 (본질적으로 DSL을 작성)를 사용해야하거나 비교를 먼저 구축해야 할 것입니다.
제휴하지 않습니다 StackOverflow