如果我有一个数字列表:
1,2,3,4,5,6,7,8
我希望按特定的号码订购,然后显示其余的。 例如,如果我选择“3”,则列表应为:
3,1,2,4,5,6,7,8
寻找linq和c#。 谢谢
答案 0 :(得分:140)
您可以在OrderBy
或ThenBy
中使用比较来执行条件排序。
list.OrderByDescending(i => i == 3).ThenBy(i => i);
我使用OrderByDescending
因为我希望首先匹配结果(true
比false
“更高”。
答案 1 :(得分:5)
也许是这样的:
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));
答案 2 :(得分:3)
几个答案已经对最后几个数字进行了排序(这可能是正确的,因为您只显示已排序的列表)。如果您希望“未选中的”数字以原文显示,而不一定是排序顺序而不是排序,您可以改为执行;
int num = 3;
var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
正如@DuaneTheriot指出的那样,IEnumerable's extension method OrderBy执行稳定排序,不会更改具有相同键的元素的顺序。换句话说;
var result = list.OrderBy(x => x != 3);
首先排序3并保持所有其他元素的顺序。
答案 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);