매우 특별한 방법으로 정렬해야하는 항목 목록이 있습니다.목록 사용자 지정 정렬
이 예제를 보자
public class PayStubDetailItem
{
public string Code { get; set; }
}
void Main()
{
var bonus = new PayStubDetailItem() { Code = "Bonus" };
var ot = new PayStubDetailItem() { Code = "OT"};
var reg = new PayStubDetailItem() { Code = "Reg"};
var otPrem = new PayStubDetailItem() { Code = "OTPrem"};
var tps = new PayStubDetailItem() { Code = "3ps"};
var list = new List<PayStubDetailItem> {
bonus, ot, reg, otPrem, tps
};
}
내 요구 사항은 상태가 다음과 같이해야한다 정렬 : 등록, OT, OTPrem, 알파 - 종류의 코드.
단어 목록에 'Reg'코드가 포함되어 있으면 'OT'가 포함되어있는 경우 Reg 다음에 오는 것이 좋습니다. 모든 특정 코드는 알파벳 순으로 정렬해야합니다 . 내 예에서
정렬 된 목록은 다음과 같아야합니다 등록, OT, OTPrem, 3PS, 보너스
이이 무슨을 달성하는 가장 우아한 방법이 될 것이다? 아마도 LINQ 또는 사용자 지정 비교자를 사용합니다.
이
내가 지금까지 시도한 것입니다하지만 자세한에있다 :var subList = list.Where(i => i.Code != "OT" && i.Code != "Reg" && i.Code != "OTPrem");
subList = subList.OrderBy(l => l.Code);
var newList = new List<PayStubDetailItem>();
if (list.Select(c => c.Code).Contains("Reg"))
{
newList.Add(list.Where(i => i.Code == "Reg").FirstOrDefault());
}
if (list.Select(c => c.Code).Contains("OT"))
{
newList.Add(list.Where(i => i.Code == "OT").FirstOrDefault());
}
if (list.Select(c => c.Code).Contains("OTPrem"))
{
newList.Add(list.Where(i => i.Code == "OTPrem").FirstOrDefault());
}
newList.AddRange(subList);
newList.Dump();
감사
LINQ는 괜찮아 보입니다. 너 해봤 어? –
@DavidL 내 게시물을 현재 시도로 업데이트했지만 마음에 들지 않습니다. 그것은 추한 것 –