Linq 首先按特定数字排序,然后按顺序显示所有其余部分
Posted
技术标签:
【中文标题】Linq 首先按特定数字排序,然后按顺序显示所有其余部分【英文标题】:Linq Order by a specific number first then show all rest in order 【发布时间】:2012-03-29 21:34:28 【问题描述】:如果我有一个数字列表:
1,2,3,4,5,6,7,8
我想按特定编号订购,然后显示其余部分。 例如,如果我选择“3”,则列表应为:
3,1,2,4,5,6,7,8
寻找 linq 和 c#。 谢谢
【问题讨论】:
【参考方案1】:您可以使用OrderBy
或ThenBy
中的比较来执行条件排序。
list.OrderByDescending(i => i == 3).ThenBy(i => i);
我使用OrderByDescending
是因为我想首先匹配结果(true
比false
“更高”)。
【讨论】:
@cracker:将OrderByDescending
更改为OrderBy
或i == 3
更改为i != 3
如果要对字符串列myDataList.OrderByDescending(i => i.StringColumnValue[0] == filterStringValue[0]).ToList()
进行排序。我在这里用了你的逻辑。根据过滤器起始字母,这些结果以相同起始字母的顺序显示
所以整数收集工作但对象收集不起作用,我在这里遗漏了什么吗? object.OrderByDescending(m => m.id== 298).ThenBy(x => x.CreatedOn)
@ManishJoisar:它的工作方式相同。关键是m.id== 298
返回一个bool
,它可以是true
或false
,OrderByDescending
将首先产生true
值。也许你认为它不起作用的原因是别的。创建一个问题,以便其他人可以提供帮助。
***.com/questions/70213940/…【参考方案2】:
可能是这样的:
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));
【讨论】:
对于 necro 评论感到抱歉,但这不是一个好主意。因为如果列表包含任何 int.MinValue 条目,这种方法将不起作用。【参考方案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 并保持所有其他元素的顺序。
【讨论】:
你可以用list.OrderBy(i => i != 3)
完成同样的事情。【参考方案4】:
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);
【讨论】:
以上是关于Linq 首先按特定数字排序,然后按顺序显示所有其余部分的主要内容,如果未能解决你的问题,请参考以下文章