2012-03-29 23 views

Respuesta

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

@Tim Schmelter, ¿qué pasa si quiero mostrar 3 en lat? – cracker

+4

@cracker: cambie 'OrderByDescending' por' OrderBy' o 'i == 3' por' i! = 3' –

4

Tal vez algo como esto:

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

Un par de respuestas ya ordenar los últimos números (que pueden ser correcta, ya que sólo está mostrando una lista ya ordenada). Si desea que los números "no seleccionados" se muestren en su pedido original , no necesariamente ordenado en lugar de ordenados, puede hacerlo;

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

Como @DuaneTheriot señala, IEnumerable's extension method OrderBy hace una especie estable y no va a cambiar el orden de los elementos que tienen una clave iguales. En otras palabras;

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

funciona igual de bien para ordenar 3 primero y mantener el orden de todos los demás elementos.

+0

Puede lograr lo mismo con 'list.OrderBy (i => i! = 3)'. –

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