반응형
Linkq는 먼저 특정 번호로 주문한 다음 모든 나머지 순서를 순서대로 표시합니다.
번호 목록이 있는 경우:
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
).
두 개의 답변이 이미 마지막 몇 개의 숫자를 정렬했습니다(이미 정렬된 목록만 표시하므로 정확할 수 있음)."선택되지 않은" 번호를 정렬된 대신 정렬된 순서가 아닌 원래 번호로 표시하려면 대신 표시할 수 있습니다.
int num = 3;
var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
@Duane처럼폭동은 IEnumberable의 확장 메서드 OrderBy가 안정적으로 정렬되며 동일한 키를 가진 요소의 순서를 변경하지 않는다고 지적합니다.즉,
var result = list.OrderBy(x => x != 3);
3을 먼저 정렬하고 다른 모든 요소의 순서를 유지하는 것도 마찬가지입니다.
아마도 이런 것들이 있을 것입니다.
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));
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);
동적 문자열 값 목록을 사용하여 아래 코드로 시도할 수 있습니다.
var defaultSortingInternalTrades = ["E,F,G"];
var ItemsToSort = ["A","B","C","D","E",...];
var fData = items.Where(d => defaultSortingInternalTrades.Contains(d.ToString()))
.OrderBy(x => defaultSortingInternalTrades.IndexOf(x.ToString())).ToList();
var oData = items.Where(d => !defaultSortingInternalTrades.Contains(d.ToString())).ToList();
fData.AddRange(oData);
@joachim-isaksson 아이디어를 사용하여 다음과 같은 확장 방법을 고안했습니다.
public static IOrderedEnumerable<TSource> OrderByWithGivenValueFirst<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
TKey value
)
=> source.OrderBy(x => !keySelector(x).Equals(value));
테스트:
[TestFixture]
public class when_ordering_by_with_given_value_first
{
[Test]
public void given_value_is_first_in_the_collection()
{
var languages = new TestRecord[] {new("cs-CZ"), new("en-US"), new("de-DE"), new("sk-SK")};
languages.OrderByWithGivenValueFirst(x => x.Language, "en-US")
.ShouldBe(new TestRecord[] {new("en-US"), new("cs-CZ"), new("de-DE"), new("sk-SK")});
}
private record TestRecord(string Language);
}
언급URL : https://stackoverflow.com/questions/9933888/linq-order-by-a-specific-number-first-then-show-all-rest-in-order
반응형
'itsource' 카테고리의 다른 글
봄 부팅 애플리케이션을 위해 commandLine에서 application.properties를 전달하는 방법은 무엇입니까? (0) | 2023.07.01 |
---|---|
Oracle에서 SQL 쿼리의 결과 연결 (0) | 2023.07.01 |
오라클 피벗 쿼리는 열 이름 주위에 따옴표가 있는 열을 제공합니다.뭐라고? (0) | 2023.07.01 |
SQL Server에서 OPTION(MAXDOP 1)을 사용하는 목적은 무엇입니까? (0) | 2023.07.01 |
Mongoose 스키마 형식 변경 (0) | 2023.07.01 |