[c#] Linq 먼저 특정 번호로 주문한 다음 모든 나머지를 순서대로 표시합니다.

번호 목록이있는 경우 :

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).


답변

아마도 다음과 같습니다.

List<int> ls=new List<int>{1,2,3,4,5,6,7,8};
int nbr=3;
var result= ls.OrderBy (l =>(l==nbr?int.MinValue:l));


답변

몇 개의 답변은 이미 마지막 몇 개의 숫자를 정렬합니다 (이미 정렬 된 목록 만 표시하므로 정확할 수 있음). “선택되지 않은”번호가 원래대로 표시되도록 하려면 정렬 된 순서가 아니라 반드시 정렬 된 순서 로 표시 하지 않아도 됩니다.

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을 먼저 정렬하고 다른 모든 요소의 순서를 유지하는 것과 마찬가지로 작동합니다.


답변

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);


답변