번호 목록이있는 경우 :
1,2,3,4,5,6,7,8
특정 번호로 주문한 다음 나머지를 보여 드리고 싶습니다. 예를 들어 '3'을 선택하면 목록은 다음과 같아야합니다.
3,1,2,4,5,6,7,8
linq 및 c #을 찾고 있습니다. 감사합니다
답변:
OrderBy
또는 ThenBy
에서 비교 를 사용하여 조건부 정렬을 수행 할 수 있습니다 .
list.OrderByDescending(i => i == 3).ThenBy(i => i);
OrderByDescending
일치하는 결과를 먼저 원 하기 때문에 사용합니다 ( true
보다 "높음" false
).
myDataList.OrderByDescending(i => i.StringColumnValue[0] == filterStringValue[0]).ToList()
. 여기에 당신의 논리를 사용했습니다. 필터 시작하는 편지를 바탕으로, 그 결과는 같은 시작 문자 순서대로 표시됩니다
몇 개의 답변은 이미 마지막 몇 개의 숫자를 정렬합니다 (이미 정렬 된 목록 만 표시하므로 정확할 수 있음). "선택되지 않은"번호가 원래대로 표시되도록 하려면 정렬 된 순서가 아니라 반드시 정렬 된 순서 로 표시 하지 않아도 됩니다.
int num = 3;
var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
@DuaneTheriot가 지적했듯이 IEnumerable의 확장 메서드 OrderBy 는 안정적인 정렬을 수행하며 동일한 키를 가진 요소의 순서를 변경하지 않습니다. 다시 말해;
var result = list.OrderBy(x => x != 3);
3을 먼저 정렬하고 다른 모든 요소의 순서를 유지하는 것과 마찬가지로 작동합니다.
list.OrderBy(i => i != 3)
.
public static IEnumerable<T> TakeAndOrder<T>(this IEnumerable<T> items, Func<T, bool> f)
{
foreach ( var item in items.Where(f))
yield return item;
foreach (var item in items.Where(i=>!f(i)).OrderBy(i=>i))
yield return item;
}
var items = new [] {1, 4, 2, 5, 3};
items.TakeAndOrder(i=> i == 4);
OrderByDescending
에OrderBy
나i == 3
에i != 3