2012-03-29 3 views

Antwort

114
list.OrderByDescending(i => i == 3).ThenBy(i => i); 
+0

@Tim Schmelter, was, wenn ich 3 bei Lat zeigen möchte? – cracker

+4

@cracker: 'OrderByDescending' in' OrderBy' oder 'i == 3' in' i! = 3' ändern –

4

Vielleicht so etwas wie:

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

Ein paar Antworten schon die letzten paar Nummern sortieren (das richtig sein, da Sie nur eine bereits sortierte Liste angezeigt). Wenn Sie möchten, dass die "nicht ausgewählten" Zahlen in ihrer ursprünglichen , nicht unbedingt sortierten Reihenfolge statt sortiert angezeigt werden, können Sie stattdessen tun;

int num = 3; 
var result = list.Where(x => x == num).Concat(list.Where(x => x != num)); 

Wie @DuaneTheriot weist darauf hin, IEnumerable's extension method OrderBy hat eine stabile Art und wird nicht die Reihenfolge der Elemente ändern, die einen gleichen Schlüssel haben. Mit anderen Worten;

var result = list.OrderBy(x => x != 3); 

funktioniert auch, um zuerst 3 zu sortieren und die Reihenfolge aller anderen Elemente beizubehalten.

+0

Das gleiche kann man mit 'list.OrderBy (i => i! = 3)' erreichen. –

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