Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ对集合进行排序,以便首先显示特定字符串_C#_.net_Linq - Fatal编程技术网

C# 如何使用LINQ对集合进行排序,以便首先显示特定字符串

C# 如何使用LINQ对集合进行排序,以便首先显示特定字符串,c#,.net,linq,C#,.net,Linq,我有一个字符串值数组,{“Jools”、“Jops”、“Stoo”、“RJ”} 我想对它进行排序,以便“Jops”位于列表的第一位,但我不在乎其他值的顺序。也可以有多个值,因此所有的“Jops”实例都应该首先出现 有没有一种简单的方法可以使用LINQ实现这一点?我建议使用排序列表并编写自己的比较器:。我建议使用排序列表并编写自己的比较器:。怎么样 var values = new string[] { "Jools", "Jops", "Stoo", "RJ" }; var sortedValu

我有一个字符串值数组,
{“Jools”、“Jops”、“Stoo”、“RJ”}

我想对它进行排序,以便
“Jops”
位于列表的第一位,但我不在乎其他值的顺序。也可以有多个值,因此所有的
“Jops”
实例都应该首先出现


有没有一种简单的方法可以使用LINQ实现这一点?

我建议使用排序列表并编写自己的比较器:。

我建议使用排序列表并编写自己的比较器:。

怎么样

var values = new string[] { "Jools", "Jops", "Stoo", "RJ" };
var sortedValues = values.OrderByDescending(s => s.Equals("Jops"));
只需根据它是否是您想要的值进行排序

编辑后,在下面的评论中提到了一个非常有价值的观点,剩余的项目不按此机制排序。要保证他们的订单,请使用ThenBy()方法。

如何

var values = new string[] { "Jools", "Jops", "Stoo", "RJ" };
var sortedValues = values.OrderByDescending(s => s.Equals("Jops"));
只需根据它是否是您想要的值进行排序

编辑后,在下面的评论中提到了一个非常有价值的观点,剩余的项目不按此机制排序。为了保证他们的订单,请使用ThenBy()方法。

如果您指的是
“Jops”
硬编码,则可以:

var result = values
    .Where(x => x == "Jops")
    .Concat(values.Where(x => x != "Jops"));
较短的版本:

var result = values
    .OrderByDescending(s => s.Equals("Jops"));
如果您的意思是“Jops”硬编码,则可以:

var result = values
    .Where(x => x == "Jops")
    .Concat(values.Where(x => x != "Jops"));
较短的版本:

var result = values
    .OrderByDescending(s => s.Equals("Jops"));


Jops从不在Jools之前出现。。。好吧,除非是在他的尸体上;-)老兄,我喜欢那个游戏+1.为了回忆。为什么你想先找工作,因为按字母顺序排列?或者Jops应该总是第一位?我的实际数据是一组类型,其中一个类型是主类型,其余的都是杂项类型。我想先展示主要的一个,其余的以任何顺序展示。我肯定我以前在什么地方回答过这个问题,但找不到真正的问题……:)看起来是重复的,但重复的问题标题有点像裤子。难怪我找的时候没找到!Jops从不在Jools之前出现。。。好吧,除非是在他的尸体上;-)老兄,我喜欢那个游戏+1.为了回忆。为什么你想先找工作,因为按字母顺序排列?或者Jops应该总是第一位?我的实际数据是一组类型,其中一个类型是主类型,其余的都是杂项类型。我想先展示主要的一个,其余的以任何顺序展示。我肯定我以前在什么地方回答过这个问题,但找不到真正的问题……:)看起来是重复的,但重复的问题标题有点像裤子。难怪我找的时候没找到!假设它迭代并计算真、假、假、假,并以此为基础对其排序?我要注意的是,这将使其余部分不确定,以解决另外一个
然后由
对其余部分排序的问题。或者,要将所有这些都放在一个调用
OrderBy
的过程中,请使用一个
IComparer
的重载。它的工作方式正好相反:)@BartoszKP您完全正确-修复了@AdamHouldsworth这很重要:如果比较结果不一致(例如A>B,但在下一次比较中B>A),排序可能会做一些奇怪的事情。但是,与其使用
ThenBy
不如使用一个比较器,当两个值都不是“Jools”时,该比较器将委托给默认值。假设该比较器迭代并计算真、假、假、假,并基于此对其进行排序?我要注意,这将使其余部分不确定,以解决额外的
ThenBy
可以对其余部分进行排序的问题。或者,要将所有这些都放在一个调用
OrderBy
的过程中,请使用一个
IComparer
的重载。它的工作方式正好相反:)@BartoszKP您完全正确-修复了@AdamHouldsworth这很重要:如果比较结果不一致(例如A>B,但在下一次比较中B>A),排序可能会做一些奇怪的事情。但是,与其使用
,不如使用一个比较器,当两个值都不是“Jools”时,该比较器将委托给默认值。