vts*_*vts 70 c# linq asp.net sorting
如果我有一个数字列表:
1,2,3,4,5,6,7,8
Run Code Online (Sandbox Code Playgroud)
我想按特定的数字订购,然后展示其余部分.例如,如果我选择'3',列表应该是:
3,1,2,4,5,6,7,8
Run Code Online (Sandbox Code Playgroud)
寻找linq和c#.谢谢
Tim*_*ter 156
您可以在OrderBy
或ThenBy
执行条件排序中使用比较.
list.OrderByDescending(i => i == 3).ThenBy(i => i);
Run Code Online (Sandbox Code Playgroud)
我使用,OrderByDescending
因为我想首先匹配结果(true
比"高" false
).
也许是这样的:
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));
Run Code Online (Sandbox Code Playgroud)
一些答案已经对最后几个数字进行了排序(这可能是正确的,因为您只显示了一个已经排序的列表)。如果您希望“未选择”的数字以其原始顺序显示,不一定是排序顺序而不是排序,您可以这样做;
int num = 3;
var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
Run Code Online (Sandbox Code Playgroud)
正如@DuaneTheriot 指出的那样,IEnumerable 的扩展方法 OrderBy执行稳定排序并且不会更改具有相等键的元素的顺序。换句话说;
var result = list.OrderBy(x => x != 3);
Run Code Online (Sandbox Code Playgroud)
也可以先对 3 进行排序并保持所有其他元素的顺序。