2012-03-29 29 views

Trả lời

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

@Tim Schmelter, nếu tôi muốn hiển thị 3 tại lat thì sao? – cracker

+4

@cracker: thay đổi 'OrderByDescending' thành' OrderBy' hoặc 'i == 3' thành' i! = 3' –

4

Có lẽ một cái gì đó như thế này:

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

Một vài câu trả lời đã được sắp xếp vài con số cuối cùng (có thể là đúng vì bạn chỉ hiển thị một danh sách đã được sắp xếp). Nếu bạn muốn các số "không được chọn" được hiển thị trong đơn hàng gốc , không nhất thiết phải sắp xếp thay vì được sắp xếp, bạn có thể thay thế;

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

Như @DuaneTheriot chỉ ra, IEnumerable's extension method OrderBy hiện một loại ổn định và sẽ không thay đổi thứ tự của các yếu tố đó có một chìa khóa bằng nhau. Nói cách khác;

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

hoạt động cũng như sắp xếp 3 trước và giữ nguyên thứ tự của tất cả các thành phần khác.

+0

Bạn có thể thực hiện điều tương tự với '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); 
Các vấn đề liên quan