Linq按特定数字排序然后按顺序显示所有其余部分

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

您可以在OrderByThenBy执行条件排序中使用比较.

list.OrderByDescending(i => i == 3).ThenBy(i => i);
Run Code Online (Sandbox Code Playgroud)

我使用,OrderByDescending因为我想首先匹配结果(true比"高" false).

  • @cracker:将`OrderByDescending`改为`OrderBy`或`i == 3`改为`i!= 3` (4认同)

Ari*_*ion 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));
Run Code Online (Sandbox Code Playgroud)


Joa*_*son 5

一些答案已经对最后几个数字进行了排序(这可能是正确的,因为您只显示了一个已经排序的列表)。如果您希望“未选择”的数字以其原始顺序显示,不一定是排序顺序而不是排序,您可以这样做;

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 进行排序并保持所有其他元素的顺序。

  • 您可以使用“list.OrderBy(i =&gt; i != 3)”完成同样的事情。 (2认同)