Linq先按特定的数字sorting,然后依次显示所有的rest
如果我有一个数字列表:
1,2,3,4,5,6,7,8
我想以一个特定的数字来订购,然后显示其余的。 例如,如果我select“3”,列表应该是:
3,1,2,4,5,6,7,8
寻找linq和C#。 谢谢
list.OrderByDescending(i => i == 3).ThenBy(i => i);
也许这样的事情:
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));
一些答案已经sorting了最后的几个数字(这可能是正确的,因为你只显示一个已经sorting的列表)。 如果你希望“未被选中”的数字以原始的,不一定sorting的顺序而不是sorting的,你可以做;
int num = 3; var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
正如@DuaneTheriot指出的那样, IEnumerable的扩展方法OrderBy进行稳定的sorting,不会改变具有相同键的元素的顺序。 换一种说法;
var result = list.OrderBy(x => x != 3);
也可以先sorting3,并保持所有其他元素的顺序。
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);